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

freeek 07.06.2009 20:35

правильные вычисления
 
можно ли заставить actionscript вычислять правильно?

Код AS3:

var _test:Number  = 1;
 
stage.addEventListener(Event.ENTER_FRAME, test);
 
function test(e:Event):void
{
trace(_test -= 0.1);
}

в аутпуте выдаёт

Код:

0.9
0.8
0.7000000000000001
0.6000000000000001
0.5000000000000001
0.40000000000000013
0.30000000000000016
0.20000000000000015
0.10000000000000014


Stargazer 07.06.2009 22:10

Точно такой же вопрос был недавно.

К чему такая точность? Вообще, не вижу приложений, кроме математических, где соблюдение такой точности имеет значение.

Если нужно - можете использовать такую альтернативу:
Цитата:

_test -= 1
trace(_test / 10);

iNils 07.06.2009 22:12

Код AS3:

var _test:Number  = 10;
 
stage.addEventListener (Event.ENTER_FRAME, test);
 
function test (e:Event):void {
        trace ((_test -= 1)/10);
}


wizardjedi 08.06.2009 10:13

Заставить вычислять "правильно" фактически не возможно, так как все "числа с запятой" представляются в приближённом виде. Происходит накопление ошибки, что вы и продемонстрировали.

Вообще, это почти не мешает, если вспомнить, что сравнение дробных чисел нужно производить как попадание в окрестность числа.

Например так,
if (Math.abs(a-7)<0.00001){
...
}


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

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