Главная страница
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.49 MB
Время: 0.045 c
14-1104765928
Piter
2005-01-03 18:25
2005.01.23
Быстрый способ вырезать строку


1-1105516584
Zilog
2005-01-12 10:56
2005.01.23
Посоветуйте статью, где описано как писать плагины для своей прог


8-1097601258
TwisteR
2004-10-12 21:14
2005.01.23
Графика в TRichEdit...


3-1103520417
Рафик
2004-12-20 08:26
2005.01.23
Компонента с помощью котрой можно не использовать BDE


4-1102355599
mefisto
2004-12-06 20:53
2005.01.23
Передать программе параметры?