Abs62

Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору NORIO Ну, если в общих чертах... Числа с плавающей точкой представляются в экспотенциальном виде - мантисса (нормированное число) и экспонента (показатель степени). Для простоты понимания можно для начала рассмотреть это дело в десятичной системе счисления. Если у нас есть число 12.34, скажем, то в экспотенциальном виде оно запишется как 1.234*101. Здесь 1.234 - это мантисса, а 1 - экспонента. Если у нас под мантиссу отведено только четыре позиции для значащих цифр, к примеру, понятно, что 1.2347 записать уже не получиться - оно будет округлено до 1.235. И результат получится не совсем тот, который вроде как ожидается с точки зрения чистой математики. Вот именно это в вышеописанной программе и происходит. С той лишь разницей, что машина всё хранит и обрабатывает в двоичном виде, так что число представляется не как aaa*10bb, а как ссс*2dd. При выдаче результата число переводится из двоичной системы в десятичную, что и даёт впечатление мусора. На самом деле, конечно, никакой это не мусор, а обычная двоичная дробь. Ошибка округления, переведённая в десятичную систему счисления. 
---------- 0 программистов ругал сердитый шеф Потом уволил одного, и стало их FF |
|