<script language="javascript">
function calc(){
var x1 = 110;
var y1 = 1.1;
alert(x1/y1); //99.99999999999998....
}
</script>
Как так???
Кто объяснит, может я где ошибся?
Результат: у IE: 99.99999999999998 у Opera: 99.99999999999999
PS:Странно даже тут опера оказалась точнее IE... респект опере =))
21.09.07 14:29: Перенесено модератором из 'Java' — Blazkowicz
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, onedes, Вы писали:
O>>Результат: у IE: 99.99999999999998 у Opera: 99.99999999999999
O>>PS:Странно даже тут опера оказалась точнее IE... респект опере =))
B>1) JavaScript это не Java
B>2) Разберись что такое числа с плавающей запятой и как они представляются в двоичном формате. Тогда ты поймешь что не все десяитичные дроби можно представить конечной записью в двоичном виде. И наоборот. То что мы получаев в двоичном виде не имеет конечного предствления в десятичной записи. Отсюда и подобные артефакты при вычислениях над нецелочисленными типами.
Понял, но несовсем понятно почему Опера и IE дают разные результаты.
Например: тот же стандартный калькулятор выдаёт 100
Да и C++ тоже не подвёл:
DOUBLE x = 110, y=1.1;
x = x / y;
printf("Res: %f\r\n",x);
Результат: 100.000000
с JavaScript оч странно получается.
PS: я понимаю что Java это не JavaScript, но тут нет форума JScript
O>Результат: у IE: 99.99999999999998 у Opera: 99.99999999999999
O>PS:Странно даже тут опера оказалась точнее IE... респект опере =))
в Firefox2.0 (Windows) тоже 99.99999999999999
Здравствуйте, onedes, Вы писали:
O>Понял, но несовсем понятно почему Опера и IE дают разные результаты.
Результат скорее всего один. Механизмы его вывода в десятичную запись разные.
O>Например: тот же стандартный калькулятор выдаёт 100
O>Да и C++ тоже не подвёл:
Давай, ты попробуешь освоить
поиск. Эта тема в каждом форуме, да по несколько раз обсуждалась.
O>PS: я понимаю что Java это не JavaScript, но тут нет форума JScript
Есть.
Здравствуйте, sef, Вы писали:
O>>Результат: у IE: 99.99999999999998 у Opera: 99.99999999999999
O>>PS:Странно даже тут опера оказалась точнее IE... респект опере =))
sef>в Firefox2.0 (Windows) тоже 99.99999999999999
и в Safari for win тоже )
Здравствуйте, onedes, Вы писали:
O>Результат: у IE: 99.99999999999998 у Opera: 99.99999999999999
O>PS:Странно даже тут опера оказалась точнее IE... респект опере =))
http://xpoint.ru/know-how/Articles/FloatingPointNumbers?comments
Здравствуйте, onedes, Вы писали:
O>Понял, но несовсем понятно почему Опера и IE дают разные результаты.
O>Например: тот же стандартный калькулятор выдаёт 100
А ты попробуй посчитать на калькуляторе вот такое вот:
1/3 (выдаст 0.3333333...),
а потом умножь это обратно на 3

Калькулятор пытается отслеживать такие ситуации.
O>Да и C++ тоже не подвёл:
O>O> DOUBLE x = 110, y=1.1;
O> x = x / y;
O> printf("Res: %f\r\n",x);
O>
O>Результат: 100.000000
То, что printf вывела 100 — это плюс ей, но значит это лишь то, что printf вывела 100

А в памяти у тебя все равно не 100.

Посмотри значения под отладчиком:
x 99.999999999999986 double
y 1.1000000000000001 double