Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Потому что 2.3 нельзя представить в виде многочлена конечной... 29.06.07 10:14 Число просмотров: 2814
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 29.06.07 10:16 Количество правок: 2
|
> Можно ещё 2 вопроса по поводу? > 1. Почему некоторые числа в сопроцессор загружаются неточно > (например, 2.3 загружается как 2.2999999), и как от этого > избавиться?
Потому что 2.3 нельзя представить в виде многочлена конечной длины ( x1*2^-1 + x2*2^-2 + ... + xn*2^-n ) * 2^e
Не каждое число можно представить в виде конечной десятичной дроби (1/3, например), так же не каждое десятичное дробное число можно представить в виде конечной двоичное дроби. То же число 1/3 легко представляется в троичной системе счисления как 0.1, а число 1/2 в троичной системе не представляется, хотя спокойно представляется в десятичной и двоичной.
Как с этим бороться - да просто округлять. Если 2.3 округлять до одного знака после запятой, то и получится 2.3, а если до сотого знака, то все равно получится 2.3. Бывают обратные ситуации, когда получается 2.30000000000000001.
С флоатом бывает много казусов. Например не следует использовать сравнения на "равно". Причем при отладочной печати далекие младшие разряды могут быть и не напечатаны. Если использовать флоат малой точности, то цикл от нуля до милиарда с шагом 0.001 превращается в бесконечный.
> 2. Почему, когда используешь команду > fincstp без предшествующей > ffree, то второе загружаемое после этого > в сопроцессор не загружаются числа (говорит, что > NAN - не число)? Или может быть это > касяк в моём процессор (у меня Athlon 900)?
Это не по адресу вопрос. Надо глубоко в документацию лезть. Могу сказать, что это не косяк. Можно проверить на другом проце. В противном случае было бы много шума про такого рода баг.
|
|
|