![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
String в Single без погрешностей [D5, D6, D7, Win95/98, Win2k, WinXP]
П7 © (2005-01-10 16:02:00)Доброго времени суток, Мастера!
Помню вроде этот вопрос задавался, но тему я ак и не нашёл (может плохо искал?). Собственно когда обчными средствами переводишь из строки в число с плавающей запятой, то получается какая-то погрешность. Которая очень напрягает. Особенно при последующей перезаписи обратно в строку получаются страшные числа. Чем чаще перегоняешь из одного типа в другой, тем хуже в итоге становится число. Обрастает жуткими погрешностями и совсем не радует глаз.
Может быть есть функции (не медленнее StrToFloat), которые преобразовывают типы без погрешностей?
Подскажите пожалуйста.
Anatoly Podgoretsky (2005-01-11 00:52:00) [1]50 не степень двойки
palva (2005-01-11 00:19:00) [2]Или да
Vaitek (2005-01-10 18:50:00) [3]0.02 -> 1/50 или нет?
begin...end (2005-01-10 17:17:00) [4]> [9] Anatoly Podgoretsky © (10.01.05 17:14)
Поэтому я и говорю, что возможность точной конвертации существует.
Anatoly Podgoretsky (2005-01-10 17:14:00) [5]Да и главное, он не просил преобразовывать 0,5 - это число имеет точное представление, поскольку равно 1/2
Anatoly Podgoretsky (2005-01-10 17:13:00) [6]Потому что числа с плавающей запятой - это числа с относительной точностью. Насчет extended, double ты точно также не прав и там с потерей точности, ты просто не видишь, из-за того, что просматриваешь округленное число, посмотри в отладчике с точностью 18 цифр и увидишь. или цикле сложить скажем миллион или более раз.
Vaitek (2005-01-10 16:58:00) [7]Действительно интересный результат. Сорри за ламерский вопрос, но почему? Причем только Single. (Real, extended, double - ok)
Anatoly Podgoretsky (2005-01-10 16:49:00) [8]А теперь попробуй 0,02 и чтобы наверняка увидеть, используй именно тип Single
begin...end (2005-01-10 16:45:00) [9]> [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:42:00) [10]Нет и при том по определению.
begin...end (2005-01-10 16:33:00) [11]> [2] Anatoly Podgoretsky © (10.01.05 16:29)
Такая возможностьсуществует.
Anatoly Podgoretsky (2005-01-10 16:29:00) [12]Такой возможности не существует по определению.
Александр Иванов (2005-01-10 16:06:00) [13]Ф-ий нет, проблема не в них, а в вещественных типах с плавающей точкой.