Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=53)
-   -   Десятичный дроби (http://www.flasher.ru/forum/showthread.php?t=77882)

Parker 04.04.2006 09:16

Десятичный дроби
 
Столкнулся с такой проблемой:

Код:

var i=0;
this.onEnterFrame=function():Void{
        i+=0.1;
        trace(i);
}

Все просто до нельзя. В аутпуте сначала все нормально показывает:

0.1
0.2
0.3
0.4
0.5

НО, дальше начинаются "ошибки":

5.8
5.9
5.99999999999999
6.09999999999999
6.19999999999999

Я слышал, что AS работает капризно с дробными числами, но что он творит подобные ошибки в таких примитивных операциях, честно для меня это была новость.

Собственно вопроса то никакого и нет, просто хотелось узнать Ваше мнение по данной проблеме.

Takato 04.04.2006 10:10

Всё, сношу флэш нафиг


А вобще - дежавю - это сбой в Матрице

Takato 04.04.2006 10:24

В результате срочно созваннного заседания, посвященного этой проблеме, решено было устроить опрос среди населения. На вопрос - "Как вы относитесь к подобному багу во флэше?", наша специальная комисия получила следующие ответы -

13,4 процента - "Первый раз слышу"
7,4 процента - "Не знаю..."
6,3 процента - "Такая тема уже обсуждалась на Флэшере
15,8 процентов - "Не надо использовать дроби во флэше"
16,6 процента - "Надо использовать код типа i+=1 j=i/10 trace(j);"
12,0 процента - "Надо деинсталирвать флэш"
47,5 процента - "Путин"
23,1 процента - "Не надо обращать внимания на мелочи"
5.99999999999999 процента - "Мне всё равно"


В опросе приняло участие 1024 человека из 1063 регионов страны, разных возрастных групп и телосложения

Samodelkin 04.04.2006 11:31

Со Флэшем все нормально, это нас в школе неправильно учили...

DimZ 04.04.2006 13:36

а может это их в школе не правильно учили?

Friday13 04.04.2006 13:47

Одно из решений:
var i=0;
this.onEnterFrame=function():Void{
i+=0.1;
i=Number(String(i))
trace(i);
}

666 05.04.2006 03:20

Цитата:

Сообщение от Friday13
Одно из решений:
var i=0;
this.onEnterFrame=function():Void{
i+=0.1;
i=Number(String(i))
trace(i);
}

какой ужас :)

mr.N 05.04.2006 05:35

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

haetorigam# 05.04.2006 05:46

Цитата:

Сообщение от mr.N
Проблема действительно существует, я много раз с ней сталкивался. Решение одно - округлять. На каждом этапе вычисления.

О, вот ещё
Код:

var i=90;
var m=Math.cos(i*Math.PI/180);
trace(m);

m=6.12303176911189e-17;
даже весело

Parker 05.04.2006 09:02

Смотрю народу понравилось предлагать решения проблемы (хотя я и не просил) :) Скажу честно некоторые варианты решения меня ужаснули. Что ж кому не лень предлагайте еще более извращенные варианты - с удовольствием на них посмотрю. В конце концов - это же раздел ФЛЕЙМ - можно ж то хоть здесь оторваться :D


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

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