Форум 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)
-   -   появление чисел после запятой при элементарных целочисленных +- операциях? (http://www.flasher.ru/forum/showthread.php?t=143610)

australian incognito 20.08.2010 19:59

появление чисел после запятой при элементарных целочисленных +- операциях?
 
Вот некой переменной целочисленной (допустим 100) начинаю минусовать число (допустим 2) в цикле. Трейшу:
100
98
...
88
85,9999999998
и далее в таком духе...

Откуда этот маразм? Я так понимаю, если я потом эту переменную использую - при таком раскладе сложность вычислений увеличивается и растет загрузка цп... Или я не прав?

iNils 20.08.2010 20:12

Код можно?

australian incognito 20.08.2010 20:28

Цитата:

Сообщение от iNils (Сообщение 930252)
Код можно?

Код AS1/AS2:

aaa = 0;
bbb = 50;
onEnterFrame = function ()
{
        if (aaa++ > 20)
        {
                aaa = 0;
                if (bbb > 2)
                {
                        bbb -= 0.2;
                }
                trace(bbb);
        }
};

и результат трейса:
49.8
49.6
49.4
49.2
49
48.8
48.6
48.4
48.2
48
47.8
47.6
47.4
47.2
47
46.8
46.5999999999999
46.4
46.1999999999999
45.9999999999999
45.7999999999999
45.5999999999999
45.3999999999999
45.1999999999999
44.9999999999999

iNils 20.08.2010 20:31

И где в числе 0.2 целое число?

australian incognito 20.08.2010 20:33

виноват, просто с целым числом дольше ждать ошибку

Добавлено через 48 секунд
не важно даже, с каким - целым или дробным... важнее вопрос - дает ли это в дальнейшем нагрузку на проц?

iNils 20.08.2010 20:40

Ее не будет. При работе с дробными числами (при чем не у всех, дроби полученные путем деления на 5, от этом проблемы избавлены) накапливается погрешность, которая в один прекрасный момент вылазит на свет. А с целыми числами такой погрешности нет.
Возможный вариант, что число было получено в результате каких вычислений и трейс показывает его как целое, но на самом деле, он просто округляет его до целого. Например число 2.000000000000001 трейс покажет как 2

australian incognito 20.08.2010 20:41

спасибо за развернутый ответ.

Tails 06.03.2011 21:03

у меня тот-же трабл, но вычитать дробную переменную нужно.
Можно както обрезать или округлить полученную такую дробную переменную ?
Чтоб выводилось не 234.86999999999999999 а 234.86 c двумя числами после запятой ?

Всё придумал, умножаем на 100 делем на 100


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

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