Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Java > Ошибка в Java VM!!!!


Автор: BV 14.04.02, 13:17
Господа!

В Microsoft Java VM есть досадная ошибка:

....
double d = 0.5 + 0.59;
if ( d == 1.09 ) ....      // условие не выполняется

....

Так вот, господа, НЕ РАВНО!
Вообще это очень скверно, поскольку везде приходится "изощряться".
Вопрос: кто еще сталкивался с этой проблемой и как с ней боролся?


Автор: tatar_0x4E 22.04.02, 12:10
На SUN JDK 1.3.1 это равно 1.0899999999999999

Это не баг - это фича  :D

Если нужны точные значения используй BigDecimal, для этого он и создавался.

   java.math.BigDecimal x = new java.math.BigDecimal("0.5");
   java.math.BigDecimal y = new java.math.BigDecimal("0.59");
   System.out.println(x.add(y));

Ява не может представить Double абсолютно точно, это связано со внутренней структурой типа. Поэтому кстати в конструкторе BigDecimal не рекомендуется юзать дабл (хоть это и возможно), ты получишь ту же фигню. RTFM.

Автор: BV 24.04.02, 18:49
Спасибо за ответ.

В принципе конечно огорчительно, но радует то, что эта "фича" существует в различных реализациях  ;o)
У меня есть набор функций в С++, которые я экспортировал в Java для работы с double.
Решение работает, но "червь сомнения" не давал покоя.

Еще раз спасибо.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)