2014-11-09 3 views
0

Почему этот фрагмент кода дает неточные результаты?Неточные вычисления с использованием double и float

double a = 0.3 + 0.3 + 0.3; 
System.out.println(a); 
float b = 0.3f + 0.3f + 0.3f; 
System.out.println(b); 

Результаты

0.8999999999999999 
0.90000004 
+0

Прецизии удваиваются при использовании 'double'. Вы жертвуете точностью при выполнении сохранения с помощью float. Вы должны получить предупреждение о компиляции, указав, что точность b может быть потеряна или что-то еще. Также проверьте спецификацию номера с плавающей запятой IEEE при использовании языков программирования и их представления. – ha9u63ar

ответ

2

В Java, двойные значения IEEE floating point numbers. Если они не являются степенью 2 (или суммой степеней 2, например 1/8 + 1/4 = 3/8), они не могут быть представлены точно, даже если они имеют высокую точность. Некоторые операции с плавающей запятой объединяют ошибку округления, присутствующую в этих числах с плавающей запятой. В описанных выше случаях ошибки с плавающей запятой стали достаточно значительными, чтобы отображаться на выходе.

+0

+1 для ответа. – ha9u63ar

+0

@hagubear спасибо! –

Смежные вопросы