• Авторизация


IEEE754 - вдруг кто-то ещё не знает... 26-08-2012 04:54 к комментариям - к полной версии - понравилось!


Я не знал, каюсь. Не знал что все вещественные числа считаются совершенно не правильно. Недавно столкнулся с этим в AS3 при вычислении текстурных координат. Долго копал, а потом узнал это: http://www.yur.ru/science/computer/IEEE754.htm

В AS3 например такая операция 0.4 + 0.2 даёт результат 0.6000000000000001. Из-за этого текстурные координаты берутся от другого пикселя и картинка становится неверной. В моём случае достаточно было просто обрезать вычисленный результат. Наиболее быстрый способ это сделать такой: int(10000000*x) / 10000000. И делать надо это после каждой арифметической операции с вещественным числом x.

А вообще проблема очень серьёзная и решений на сегодняшний день нет. Подробности в статье по ссылке выше.
вверх^ к полной версии понравилось! в evernote
Комментарии (3):
20-03-2013-07:51 удалить
Это не проблема, а нормальное поведение.
Вся суть в том что почти никаую десчтичную дродь нельзя точно записать в двоичном виде, и даже если просто написать в коде 0.1 то полученная константа будет записана с погрешностью. Точно записываются только дроби, которые можно представить в виде суммы чисел (1/2^n1+1/2^n2+1/2^n3…) где n — натуральное число.
Одно из возможных решений на других языках, это использование BCD (вычисления BCD поддерживаются CPU), но боюсь в as3 для этого стандартных средств нет.
eugene20237 20-03-2013-16:22 удалить
Спасибо большое за комментарий! BCD - это интересно!
20-03-2013-22:48 удалить
Незачто. А вот если бы исторически сложилось так, что у человека было восемь пальцев, все бы жили счасливо ;)


Комментарии (3): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник IEEE754 - вдруг кто-то ещё не знает... | eugene20237 - Дневник eugene20237 | Лента друзей eugene20237 / Полная версия Добавить в друзья Страницы: раньше»