Показать сообщение отдельно
Старый 07.07.2004, 13:06
BrainSmasher вне форума Посмотреть профиль Отправить личное сообщение для BrainSmasher Найти все сообщения от BrainSmasher
  № 20  
Ответить с цитированием
BrainSmasher

Регистрация: Jul 2004
Адрес: Москва
Сообщений: 28
Господа, все куда как проще!
Не буду вдаваться глубоко в подробности (в инете инфы по этой теме уйма) Эти все глюки растут из FPU (Floating point unit), т.е. математического модуля процессора, который собственно и занимается всеми вычислениями. Так вот у него есть так называемый регистр control word, где каждый битик отвечает за тот или иной аспект поведения этого юнита при различных вычислениях. Всякие там вызывать исключения при делении на 0, и т.п. Среди прочих там есть битики отвечающие за правила округления и точность. Так вот винда устанавливает этот регистр FPU во вполне определенное значение (разные версии винды в разные ) и этим объясняются обсуждаемые здесь "глюки". В принципе этот регистр можно менять самому, я это делал под Дельфой, но сомневаюсь что это позволит флеш.
Кстати, что касается суммовых операций то тут все куда проще, смещаем принудительно разрядную сетку на 4 разряда (умножаем все суммы на 10000) а после любых вычислений делаем round результата, в итоге получаем целое число, которое точно представимо всегда (если не выходит за пределы разрядной сетки, но сильно я сомневаюсь что Вы оперируете подобными суммами )
Кстати, на этом же принципе сделан и денежный тип currency в той же Дельфи.