浮点数的Java减法是无穷大?

smu*_*kes 1 java floating-point floating-accuracy floating-point-precision

在我的调试器中,我可以看到以下值:

float min = -3.1931721E38
float max = 3.3434891E38

float temp = (max-min);
Run Code Online (Sandbox Code Playgroud)

这导致无穷大.这是为什么?(2-2 ^ 23)·2 ^ 127比临时变量大吗?

rge*_*man 9

该减法的数学结果大于最大可能FloatFloat.MAX_VALUE.Java遵循IEEE浮点运算规则,导致Infinity.

如果你想要结果,那么你可以使用doubles代替,它具有更高的精度和更大范围的有效值.


Sta*_*wed 7

来自Java语言规范

浮点乘法的结果由IEEE 754算法的规则决定:

  • [...]
  • 如果产品的大小太大而无法表示,我们说操作溢出 ; 结果是无穷无尽的适当标志.