在我的调试器中,我可以看到以下值:
float min = -3.1931721E38
float max = 3.3434891E38
float temp = (max-min);
这导致了无穷大。为什么?(2-2^23)·2^127大于温度变量,对吗?
此减法运算的数学结果大于最大可能的Float
值Float.MAX_VALUE
。Java遵循IEEE关于浮点运算的规则,这导致了Infinity
。
如果您想要结果,那么您可以使用double
s,它具有更高的精度和更大的有效值范围。
来自Java语言规范
浮点乘法的结果由IEEE 754算术规则确定:
- […]
- 如果乘积的大小太大而无法表示,我们称运算溢出则结果是适当符号的无穷大
Float
值只有32位(或4个字节)。因此,对于可计算的答案来说,您使用的容器太小了。然后缓冲区溢出。
尝试使用更大的数据结构,如double
,它是64位(或8字节)的容器