Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

String в Single без погрешностей   Найти похожие ветки 

 
П7   (2005-01-10 16:02) [0]

Доброго времени суток, Мастера!
Помню вроде этот вопрос задавался, но тему я ак и не нашёл (может плохо искал?). Собственно когда обчными средствами переводишь из строки в число с плавающей запятой, то получается какая-то погрешность. Которая очень напрягает. Особенно при последующей перезаписи обратно в строку получаются страшные числа. Чем чаще перегоняешь из одного типа в другой, тем хуже в итоге становится число. Обрастает жуткими погрешностями и совсем не радует глаз.
Может быть есть функции (не медленнее StrToFloat), которые преобразовывают типы без погрешностей?
Подскажите пожалуйста.


 
Александр Иванов ©   (2005-01-10 16:06) [1]

Ф-ий нет, проблема не в них, а в вещественных типах с плавающей точкой.


 
Anatoly Podgoretsky ©   (2005-01-10 16:29) [2]

Такой возможности не существует по определению.


 
begin...end ©   (2005-01-10 16:33) [3]

> [2] Anatoly Podgoretsky ©   (10.01.05 16:29)

Такая возможность существует.


 
Anatoly Podgoretsky ©   (2005-01-10 16:42) [4]

Нет и при том по определению.


 
begin...end ©   (2005-01-10 16:45) [5]

> [4] Anatoly Podgoretsky ©   (10.01.05 16:42)

var
 R: Real;
 S: String;

begin
 R := 0.5;
 S := FloatToStr(R)
end.

Перегоняйте туда-обратно сколько угодно. Так что такая возможность существует, и наличие такой возможности напрямую зависит от конкретных значений конвертируемых чисел.


 
Anatoly Podgoretsky ©   (2005-01-10 16:49) [6]

А теперь попробуй 0,02 и чтобы наверняка увидеть, используй именно тип Single


 
Vaitek ©   (2005-01-10 16:58) [7]

Действительно интересный результат. Сорри за ламерский вопрос, но почему? Причем только Single. (Real, extended, double - ok)


 
Anatoly Podgoretsky ©   (2005-01-10 17:13) [8]

Потому что числа с плавающей запятой - это числа с относительной точностью. Насчет extended, double ты точно также не прав и там с потерей точности, ты просто не видишь, из-за того, что просматриваешь округленное число, посмотри в отладчике с точностью 18 цифр и увидишь. или цикле сложить скажем миллион или более раз.


 
Anatoly Podgoretsky ©   (2005-01-10 17:14) [9]

Да и главное, он не просил преобразовывать 0,5 - это число имеет точное представление, поскольку равно 1/2


 
begin...end ©   (2005-01-10 17:17) [10]

> [9] Anatoly Podgoretsky ©   (10.01.05 17:14)

Поэтому я и говорю, что возможность точной конвертации существует.


 
Vaitek ©   (2005-01-10 18:50) [11]

0.02 -> 1/50 или нет?


 
palva ©   (2005-01-11 00:19) [12]

Или да


 
Anatoly Podgoretsky ©   (2005-01-11 00:52) [13]

50 не степень двойки



Страницы: 1 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
3-1103503786
rosl
2004-12-20 03:49
2005.01.23
кодировка


4-1102053755
Rext
2004-12-03 09:02
2005.01.23
Получение списка запущенных прочессов


4-1102058857
KOSH
2004-12-03 10:27
2005.01.23
Помошник


14-1104751852
vecna
2005-01-03 14:30
2005.01.23
Кто какие подарки получил на НГ?! =)


1-1105287896
Ищущий ответ
2005-01-09 19:24
2005.01.23
OpenDialog





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский