![]() |
Баги флеша при работе с дробными числами
Приветствую всех. Столкнулся с проблемой, попортившей немало крови а именно:
Флеш некорректно выполняет арифметические операции над некоторыми отдельно взятыми числами. Например - при вычитании из 2.3 единицу (2.3-1) получается бред вида 1.29999999.... При этом если вместо 2.3 взять 3.3, 5.3 то все ок, зато если из 5.3 вычитаем 4 (чтобы получить опять таки проблемное 1.3) получаем опять таки 1.2999999. Похожие проблемы были с делением, например при делении 1.9/0.1 получалось не 19 а 18.9999999...... В итоге это все приводило к тому что при последующих манипуляциях с числами получались реально неверные результаты, и я никак н мог понять в чем дело. Да, проверил это на других SDK - все тоже самое. Кто нибудь сталкивался с подобным? |
сталкивался и сталкиваюсь...
еще пытаюсь сам понять что за фигня))) |
Вот блин =)) И как теперь быть, когда в программе сплошные вычисления?
|
я тем же вопросом озадачен ))
|
Этот вопрос часто обсуждается, используйте поиск по форуму.
|
а если арифметические действия будут происходить с числами у которых после запятой около 4-5 знаков тоже будет врать?
|
Это не баг флэша - это обычное поведение floating point. Так, например нельзя точно посчитать 0.1, 0.6 и т.д. Округляйте до нужного вам знака.
|
как это??нельзя точно посчитать 0.5 - 0.1 к примеру????????
|
Это накопительная ошибка. Я ее встречал также в javascript и php.
|
Не очень понятно что до чего округлять. Допустим я работаю с десятыми долями, т е мне достаточно одного знака. И как мне быть когда мне нужно к примеру 19 умножить на 0.1? Или же вышеприведенное вычитание. И чтобы всегда было без сюрпризов?
Ps Не знаю обычное ли это поведение, но я с плавающей точкой работаю не первый и даже не десятый раз (начинаю с паскаля и заканчивая .Net), но подобное виже впервые во flash. |
| Часовой пояс GMT +4, время: 20:29. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.