Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо