Почему этот результат «0» в моем Java-приложении?

#java #floating-point

#java #с плавающей запятой

Вопрос:

Я попробовал следующую операцию :

 728660000f-728659968f
  

Какая операция с минусом в float, и она заканчивается как «0», почему?

Комментарии:

1. Взгляните на это !

Ответ №1:

Эти два значения не могут быть представлены точно как значения с плавающей запятой с одинарной точностью, и приближения, сделанные при преобразовании их из целых чисел, приводят к тому, что два значения имеют одинаковое значение. Следовательно, вычитание их дает 0.

Комментарии:

1. Приближение 7.2865997E8

2. @EdwardM.B. 728659968f , на самом деле. Конечно, нет 7.2865997E8 , то есть a double со значением 728659970, хотя вы могли бы сказать, что приближение равно 728660000f or 728659970f , поскольку оба эти представления соответствуют одному и тому же числу с одинарной точностью.