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

kackbip 02.09.2009 21:56

Это можно обойти на программном уровне

Цитата:

во всех языках есть библиотеки для точных вычислений. я думаю и для ас3 тоже есть. нужно только поискать.
Как говорится - чтд. Так почему это не зашито в fp?

iNils 02.09.2009 22:06

Цитата:

Сообщение от kackbip (Сообщение 847727)
Как говорится - чтд. Так почему это не зашито в fp?

Зачем? Кстати, координаты не могу быть меньше 0.05 пикселя, так как такая точность не нужна. Это не расчеты ядерных реакторов.

murz 02.09.2009 22:36

Цитата:

так работает процессор. такое поведение абсолютно во всех языках происходит при работе с float'ами. программное обеспечение тут не причём. это зашито на аппаратном уровне.
как насчет "С", СИ крут, а все остальное реально не для точных вычислений.
Код:

#include <stdio.h>
#include <stdlib.h>
int main(void) {
        float aaa= 2.3;
        int bbb= 1;
        float result= aaa - bbb;
        char str[123];
        sprintf(str, "%f",result);
        puts(str);//1.300000
        return EXIT_SUCCESS;
}


kackbip 03.09.2009 07:42

Расчеты могут производиться не только для определения координат. В головном сообщении этой темы указана проблема, которой лучше бы не было. Почему лучше бы не было? Потому что результат не соответствует ожидаемому, тому что диктует наш привычный десятиричный мат. аппарат. Это неизбежно приводит к багам или увеличению сроков разработки.

Яски 03.09.2009 10:40

Цитата:

Сообщение от kackbip (Сообщение 847664)
И все таки это следствие лени разработчиков.
Таких сюрпризов можно было бы избежать.

И где же вы раньше были? Как всегда появился гений, которому наплевать на 20 летние разработки математиков и программистов всего мира.

Цитата:

Сообщение от murz (Сообщение 847738)
как насчет "С", СИ крут, а все остальное реально не для точных вычислений.

Си ничем не отличается от других языков программирования — использует все те же числа с плавающей запятой. Только одно отличие — в настройках можно указать повышенную точность вычислений вещественных чисел, что означает, что все вычисления будут производиться с 80битными числами, а затем округлятся, а не обрезаться до размера переменной этого типа.

Цитата:

Сообщение от kackbip (Сообщение 847794)
Это неизбежно приводит к багам или увеличению сроков разработки.

Помоему вы накручиваете проблему, я при разработке программ очень часто имею дело с вещественными числами, ни разу это не вызывало для меня проблем. Тот факт, что вычисления с вещественными числами не соответствуют вычислениям с десятичными нужно просто учесть — это плата за скорость работы с такими числами. Например, нужно исключить из программы все сравнения с такими числами, сравнивать всегда нужно с учетом погрешности. Также нельзя складывать числа, которые сильно отличаются порядком.
В программах, в которых требуется точность вычислений не используются числа с плавающей запятой. В программах, которые работают с деньгами используются числа с фиксированной запятой — фактически каждое число умножается на 10000 для вычислений, а затем делится при выводе. Также есть вариант чисел очень высокой точности — при вычислениях точность чисел повышается автоматически.

random13 03.09.2009 11:28

Цитата:

Сообщение от iNils (Сообщение 847731)
Зачем? Кстати, координаты не могу быть меньше 0.05 пикселя, так как такая точность не нужна. Это не расчеты ядерных реакторов.

хммм а есть вопрос гео координат, там как раз важна точность десятых, сотых и тысячных

divinus 03.09.2009 11:32

как уже сказали, во флеше такая точность просто излишняя, нужна точность возьмите фортран

random13 03.09.2009 12:29

зашибись блин фортран, тогда можно будет и про флеш забыть... потому как скорость упадет в разу просто потому что буду дольше передавать инфу по externaInterface или через запросы... бред какой то

Zik. 03.09.2009 12:46

че-то не увидел в чем проблема
написал
Код AS1/AS2:

trace(1.9/0.1); // вывел 19
trace(5.3-4); // вывел 1.3
trace(2.3-1); // вывел 1.3


murz 03.09.2009 13:33

Цитата:

Сообщение от ZIK68 (Сообщение 847850)
че-то не увидел в чем проблема
написал
Код AS1/AS2:

trace(1.9/0.1); // вывел 19
trace(5.3-4); // вывел 1.3
trace(2.3-1); // вывел 1.3


Ипать, для AS2 это действительно так, а для AS3:
Код:

//18.999999999999996
//1.2999999999999998
//1.2999999999999998



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

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