Actionscript 3 Математические несоответствия - PullRequest
2 голосов
/ 06 февраля 2010

Я пытаюсь построить калькулятор во Flex / actionscript 3, но получаю некоторые странные результаты, используя класс Math:

trace(1.4 - .4); //should be 1 but it is 0.9999999999999999
trace(1.5 - .5); //should be 1 and it is 1
trace(1.444 - .444); //should be 1 and it is 1
trace(1.555 - .555); //should be 1 but it is 0.9999999999999999

Я знаю, что есть некоторые проблемы с числами с плавающей запятой, но, как вы видите, он должен по крайней мере потерпеть неудачу для всех моих примеров, я прав?

Как эта проблема решается в других калькуляторах и как мне поступить, чтобы построить полезный калькулятор в ActionScript 3, пожалуйста?

Заранее спасибо, Аднан

Ответы [ 3 ]

4 голосов
/ 06 февраля 2010

Добро пожаловать в IEEE 754 с плавающей запятой. Наслаждайтесь неточностями . Используйте механизм с фиксированной запятой, если вы хотите избежать их.

1 голос
/ 06 февраля 2010

Ваши результаты должны быть ожидаемыми, и будут наблюдаться на любом языке программирования с типом данных с плавающей запятой. Компьютеры не могут точно хранить все номера, что приводит к крайним случаям, подобным тем, которые вы опубликовали.

Узнайте о проблемах точности с плавающей точкой в ​​Википедии .

0 голосов
/ 06 февраля 2010

Я бы предположил, что большинство калькуляторов отображают меньше десятичных разрядов, чем точность их плавающей запятой. Округление до меньшего количества знаков после запятой, чем ваш уровень точности, должно облегчить проблему такого рода, но не решит все проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...