Floating point in Java

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Floating point in Java

Re: Floating point in Java

Андрей Белецкий » 27 сен 2017, 14:05

все по разному

Re: Floating point in Java

AiK » 23 фев 2017, 01:45

Полагаю, нужно смотреть в сторону как Java преобразовывает float (double) в массив символов.
А вот глубокие уровни, боюсь, на разных устройствах могут быть разными.

Floating point in Java

sasvak » 23 фев 2017, 01:24

Здравствуйте.

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

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

Пример:

Код: Выделить всё

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 1110010010000111111111001011100100100011101000101010 (Inexact, 1+11+52 bit = 64 bit)

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

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

Я прав?

Вернуться к началу