![]() |
Погрешность при сложение чисел с плавающей запятой.
Привет!
Почему Код AS3:
|
Особенности реализации вычислений на уровне железа.
|
Оригинальная особенность.
Выходит что получить правильный результат (0.9) просто так не выйдет? Можно как-нибудь сократить до большего число с плавающей запятой во флеше стандартными методами? |
Потому что числа с плавающей запятой храняться (если упрощенно) как два множетеля (экспоненты и мантисы) - поэтому некоторые десятичные дроби не возможно точно описать - т.как не каждое число можно преставить как произведение этих самых множетелей.
Смотрите Math.ceil(). И это не особенность флеша и, в данном случае не железа. Традиционно GPU считает числа с плавающей запятой гораздо быстрее CPU, но флеш не использует GPU для этого. Кроме того, точно тот же самый стандарт используется в, например Java и C#. |
более того, если взглянуть в матанализ то мы узнаем что 0.899999... и 0.9 это разные формы записи одного и того же числа. В данном случае в железе это числа разные но оооооочень близкие.
|
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.
|
Информацию усвоил, спасибо.
|
| Часовой пояс GMT +4, время: 11:15. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.