Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Интересный вопрос (цикл for) (http://www.flasher.ru/forum/showthread.php?t=59237)

AlexMatveev 11.06.2004 14:56

Интересный вопрос (цикл for)
 
Делаем цикл:

for (var i = 8; i<=10; i += 0.1) {
trace(i);
}

На выходе:

8
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
8.9
9
9.1
9.2
9.3
9.4
9.49999999999999
9.59999999999999
9.69999999999999
9.79999999999999
9.89999999999999
9.99999999999999

ПОЧЕМУ???
Я всегда думал что 9.4+0.1=9.5, а не 9.49999999999999

Nox Noctis 11.06.2004 15:32

да, есть такие глюки в мат части :(

насколько я понимаю, с этим никак не побороться..
надо учитывать что это есть

Nox Noctis 11.06.2004 15:42

Код:

a = 4;
// a = 5;
// a = 6;
// a = 7;
// a = 8;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);
a += .1;
trace(a);

а если начинать считать с a = 3 или c a = 9 - этого косяка уже нет :D :D

Dindin 12.06.2004 14:15

А вот так - еще веселее :D
Код:

for (var i = 8; i<=10; i += 1e-3) {
trace(i);
}


Jlekc 13.06.2004 16:37

да ладно, чо вы обижаете флеш, будто это его баги
протрейсети это в других апликухах, это баг процесора, и он вылазит под любым языком

Stevee 13.06.2004 18:02

я помню что это как то объясняется тока не помню как :)
давно слышал

NeZnayKa 14.06.2004 23:47

в калькуляторах точно так же
корень 0.99999999..... ровняется себе

или я что то не понял ?

kostyanK 15.06.2004 11:45

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

Например 0.1 (с точностью десять разрядов)= 0.0001100110

а теперь если перевести обратно то 0.0001100110 = 0.99609375

Nox Noctis 15.06.2004 12:14

это хорошее и логичное объяснение.

только это не объясняет почему в плеере этот глюк вылезает настолько фрагментарно :)
Код:

for (var i=-6; i<10; i+=.1) {
        trace(i);
}

проверьте, к примеру, то же самое в джаваскрипте

AlexMatveev 16.06.2004 12:11

Интересно, что думает по этому поводу Macromedia ???


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

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