在我的调试器中,我可以看到以下值:
float min = -3.1931721E38
float max = 3.3434891E38
float temp = (max-min);
这导致无穷大。这是为什么? (2-2 ^ 23)·2 ^ 127大于临界变量对吗?
答案 0 :(得分:9)
此减法的数学结果大于最大可能Float
值Float.MAX_VALUE
。 Java遵循IEEE浮点运算规则,结果为Infinity
。
如果你想要结果,那么你可以使用double
代替,它具有更高的精度和更大范围的有效值。
答案 1 :(得分:7)
浮点乘法的结果由IEEE 754算法的规则确定:
- [...]
- 如果产品的幅度太大而无法表示,我们说操作溢出; 结果是无限的适当标志。
答案 2 :(得分:0)
Float
值仅为32位(或4个字节)。因此,您使用的容器太小,无法获得可计算的答案。然后缓冲区溢出。
尝试使用更大的数据结构,例如double
,它是64位(或8字节)的容器