Форум 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=129480)

xjack 02.09.2009 16:26

Баги флеша при работе с дробными числами
 
Приветствую всех. Столкнулся с проблемой, попортившей немало крови а именно:
Флеш некорректно выполняет арифметические операции над некоторыми отдельно взятыми числами. Например - при вычитании из 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 - все тоже самое. Кто нибудь сталкивался с подобным?

Dezar 02.09.2009 16:31

сталкивался и сталкиваюсь...
еще пытаюсь сам понять что за фигня)))

xjack 02.09.2009 16:35

Вот блин =)) И как теперь быть, когда в программе сплошные вычисления?

Dezar 02.09.2009 16:41

я тем же вопросом озадачен ))

VVall 02.09.2009 16:45

Этот вопрос часто обсуждается, используйте поиск по форуму.

random13 02.09.2009 16:48

а если арифметические действия будут происходить с числами у которых после запятой около 4-5 знаков тоже будет врать?

Волгоградец 02.09.2009 16:50

Это не баг флэша - это обычное поведение floating point. Так, например нельзя точно посчитать 0.1, 0.6 и т.д. Округляйте до нужного вам знака.

Dezar 02.09.2009 16:59

как это??нельзя точно посчитать 0.5 - 0.1 к примеру????????

iNils 02.09.2009 17:09

Это накопительная ошибка. Я ее встречал также в javascript и php.

xjack 02.09.2009 17:11

Не очень понятно что до чего округлять. Допустим я работаю с десятыми долями, т е мне достаточно одного знака. И как мне быть когда мне нужно к примеру 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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.