Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Погрешность при сложение чисел с плавающей запятой. (http://www.flasher.ru/forum/showthread.php?t=149166)

Art_133 20.01.2011 11:05

Погрешность при сложение чисел с плавающей запятой.
 
Привет!
Почему
Код AS3:

trace(0.5 + 0.2 + 0.2);

выводит 0.8999999999999999, а не 0.9?

alatar 20.01.2011 11:11

Особенности реализации вычислений на уровне железа.

Art_133 20.01.2011 11:24

Оригинальная особенность.
Выходит что получить правильный результат (0.9) просто так не выйдет?
Можно как-нибудь сократить до большего число с плавающей запятой во флеше стандартными методами?

wvxvw 20.01.2011 11:29

Потому что числа с плавающей запятой храняться (если упрощенно) как два множетеля (экспоненты и мантисы) - поэтому некоторые десятичные дроби не возможно точно описать - т.как не каждое число можно преставить как произведение этих самых множетелей.

Смотрите Math.ceil(). И это не особенность флеша и, в данном случае не железа. Традиционно GPU считает числа с плавающей запятой гораздо быстрее CPU, но флеш не использует GPU для этого. Кроме того, точно тот же самый стандарт используется в, например Java и C#.

Aquahawk 20.01.2011 11:47

более того, если взглянуть в матанализ то мы узнаем что 0.899999... и 0.9 это разные формы записи одного и того же числа. В данном случае в железе это числа разные но оооооочень близкие.

-De- 20.01.2011 12:27

0.2 и 0.9 - это бесконечные периодические дроби в двоичной системе. Ну т.е. это как складывать 1/6 + 1/2 + 1/6. В десятичной записи это типа 0.1666666 + 0.5 + 0.1666666 = 0.8333332 - (в шестиричной 0.1 + 0.3 + 0.1 = 0.5). А 0.8333332 в десятичной как раз типа 0.45555555 в шестиричной, а не 0.5.

Art_133 21.01.2011 02:36

Информацию усвоил, спасибо.


Часовой пояс GMT +4, время: 11:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.