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

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Сложение двух чисел double в Java SE, floating point operations in Java
    Здравствуйте.

    Я хочу понять: как Java складывает 2 double значения (на машинном уровне или уровне двоич.) и почему она не дает правильный ответ?

    Те, что происходит на глубоком уровне (шаг за шагом)?

    Пример:


    ExpandedWrap disabled
      public class GalToLitTable {
        
          public static void main(String[] args) {
        
              System.out.println(3.7854 + 3.7854);
              System.out.println(7.5708 + 3.7854);
        
          }
        
      }


    After run:

    7.5708
    11.356200000000001

    НО должно быть:

    7.5708
    11.3562


    Я хочу понять (шаг за шагом):

    1. Как Java преобраз. эти значения в двоич?

    2. Какое представление этого двоичн ( 80 или 64 бит длины)?

    3. Как Java округл. этот двоич. (7.5708 and 3.7854 not exact convert to binary, how java rounding this binary (last bit) or java cuts this binary after 64 bit without rounding)?

    4. Как Java суммир. два бинарных значения?

    5. Как Java округл. эту двоич. сумму?

    6. Как Java преобразов. двоич. сумму в десятичную сумму?

    Вот как я сам ответил на первые 3 вопроса:

    7.5708 = 0 10000000001 11100100100001111111110010111001001 00011101000101010 (Inexact, 1+11+52 bit = 64 bit)

    3.7854 = 0 10000000000 11100100100001111111110010111001001 00011101000101010 (Inexact, 1+11+52 bit = 64 bit)

    Java has Round-Half-Even (Banker's Rounding), when convert decimal to binary.

    Я прав?
      она даёт правильный ответ настолько насколько может
      double в жаве 64 битный
      тут всё абсолютно так же, как во всех других языках и платформах на PC которые оперируют настоящими floating point
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script Execution time: 0,0609 ]   [ 17 queries used ]   [ Generated: 24.09.17, 01:25 GMT ]