При делении 123.45/10 получается 12.3449993. никак не могу понять почему, и как это исправить?
При делении 123.45/10 получается 12.3449993. никак не могу понять почему, и как это исправить?
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
14 ноября 2008 в 15:03
у дельфи кажись в дробных числах есть мантисса и экспонента
в справке набери в поиске "real" и там про это написано.
мантисса, грубо говоря, это само это число, если точку переставить после первого знака (типа 1.2424, а не 12424)
У дробных чисел (например double) в мантиссе 18 знаков (вроде так), а значит число 1.234567890123456789 равно как и число 1234567.890123456789 не может быть сохранено в этом (double) типе данных, потому что в представленных числах по 19 цифр (то есть при сохранении потеряется самая последняя цифра).
В real в мантиссе примерно 8 знаков. То есть число 2/3 (две третьих) будет представлено в виде: 0.6666667
экспонента задает смещение точки. В double числах это примерно 4500. То есть double может сохранять числа от 10^-4500 до 10^4500 (^ – это "в степени"). Опять таки примерно. Точно в справке
К чему это я? хм… а вот как в бейсике я не знаю.
13 ноября 2008 в 19:00
а каким образам тогда Delphi делит как положено?
13 ноября 2008 в 10:03
Кстати, Константин, попробуй вывести на экран 123.45 еще ДО деления его на 10. И поэкспериментируй с выводом на экран различных чисел: 1, 1.5, 1.6, 1.25, 2.5, 0.05 и т.п.
13 ноября 2008 в 1:03
Потому что в компьютере числа представляются в двоичной системе счисления. В данном случае – 32битные числа.
12.3449993 – это самое близкое к 12.345 из всех 32-битных двоичных чисел с плавающей точкой. Представить 12.345 точно – невозможно.