Подтвердить что ты не робот

Разные значения для float и double

Я не понимаю, почему значения float отличаются от двойных значений. Из приведенного ниже примера видно, что float дает другой результат, чем double для одной и той же операции:

public class Test {

    public static void main(String[] args) {
        double a = 99999.8d;
        double b = 99999.65d;
        System.out.println(a + b);

        float a2 = 99999.8f;
        float b2 = 99999.65f;
        System.out.println(a2 + b2);
    }
}

Вывод:

199999.45
199999.44

Можете ли вы объяснить, что делает это различие между float и double?

4b9b3361

Ответ 1

Поплавок - это 32-битная плавающая точка IEEE 754.

Двойной - 64-битная плавающая точка IEEE 754.

поэтому это просто вопрос точности, потому что ни одна из частей фракции .8 и .65 не имеет завершающего двоичного представления, поэтому существует некоторая ошибка округления. двойной имеет более высокую точность, поэтому имеет немного меньшую ошибку округления.

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Ответ 2

Можете ли вы объяснить, что делает это различие между float и double?

Конечно. Представьте, что у вас есть два десятичных типа: один с пятью значащими цифрами и один с десятью.

Какое значение вы бы использовали для представления pi для каждого из этих типов? В обоих случаях вы пытаетесь приблизиться к числу, которое вы не можете точно представить, - но вы не получили бы то же значение, не так ли?

То же самое для float и double - оба являются двоичными типами с плавающей запятой, но double имеет большую точность, чем float.

Ответ 3

public class Main {

    public static void main(String[] args) {
        float  a=12.6664287277627762f;
        double b=12.6664287277627762;

        System.out.println(a);
        System.out.println(b);
    }
}

Вывод:

12.666429
12.666428727762776

float может обрабатывать около 7 знаков после запятой. Двойной может обрабатывать около 16 знаков после запятой.

Ответ 4

У удвоений в два раза больше точности поплавков. Таким образом, они имеют меньшие ошибки округления.

Поплавок имеет (обычно) 32 бита и двойной 64 (опять же обычно). Таким образом, поплавки имеют ошибки округления на большее количество чисел, чем двойные.

Ответ 5

Поплавки имеют меньшую точность, чем двойные.

Это примерно вдвое меньше - 23 бит против 52 для двойного (спасибо большое мистер Скит!)!

32-бит для поплавков, 64-бит для удвоений.... Помните, что слово "float" имеет меньше букв, чем "double", что "память" трюк:)