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

时间:2014-11-04 19:27:49

标签: java floating-point floating-accuracy floating-point-precision

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

float min = -3.1931721E38
float max = 3.3434891E38

float temp = (max-min);

这导致无穷大。这是为什么? (2-2 ^ 23)·2 ^ 127大于临界变量对吗?

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:7)

来自Java Language Specification

  

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

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

答案 2 :(得分:0)

Float值仅为32位(或4个字节)。因此,您使用的容器太小,无法获得可计算的答案。然后缓冲区溢出。

尝试使用更大的数据结构,例如double,它是64位(或8字节)的容器