потеря точности плавающих чисел в целые числа - PullRequest
0 голосов
/ 27 ноября 2018
int i=187;
float f=Float.MAX_VALUE;

System.out.println((f-i)==(f+i)) ;

Это печатает true.Почему он печатает true и как я могу предотвратить эту потерю точности?

1 Ответ

0 голосов
/ 27 ноября 2018

Представляемые числа в верхнем конце диапазона float разделены интервалами 2 124 , примерно 2,028 • 10 31 .Когда выполняется арифметика, результат округляется до ближайшего представимого значения.Математическое значение добавления 187 к float.MAX_VALUE настолько близко к float.MAX_VALUE, что результат округления равен float.MAX_VALUE.

Таким образом, float.MAX_VALUE - 187 и float.MAX_VALUE + 187 равны.

Нет способа изменить это в типах float или double;Вот как они разработаны.Если вы хотите произвести более точные вычисления, существуют другие решения, такие как использование математического программного обеспечения с произвольной точностью или изменение ваших расчетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...