На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Ошибка в Java VM!!!!
    Господа!

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

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

    ....

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

      На 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.
        Спасибо за ответ.

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

        Еще раз спасибо.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0222 ]   [ 15 queries used ]   [ Generated: 14.06.24, 13:37 GMT ]