Разные значения для 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?
Ответы
Ответ 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", что "память" трюк:)