1

我正在编写一个需要在服务器上运行的代码,该代码使用旧版本的 python(2.4?)和 Numeric 而不是 numpy,我对此无能为力。为了测试代码,我使用 numpy.oldnumeric 运行它

我从一组 float32 开始,然后将值存储到它们。我的值在 1.0e50-1.0e60 范围内,并且数组一直将它们存储为“inf”。即使投射 1.0e39,也会导致“inf”。浮动不应该最大接近 1.0e108 吗?我怎样才能保留这些价值观?

....
import numpy.oldnumeric as N
data = N.zeros(10, 'f')
....
for i in range(10): data[i] = (1.0e38)*pow(10.0,i)
print data[i]

[  9.99999993e+36   9.99999968e+37              inf              inf
          inf              inf              inf              inf
          inf              inf]

解决方案:单精度浮点数(float32)的限制比我想象的要小(~3e38),感谢@aka.nice,所以我从'f'(float32)切换到'dtype = N.float64',它有足够的容量.

4

1 回答 1

4

您正在使用单精度浮点数......
在 IEEE 754 单精度中,指数的限制为 127,最大浮点值约为 2 * 2^127,即大约

2^10 > 10^3
2^120 > 10^36
2^127 > 2^7*10^36
2^127 > 100*10^36
2^127 > 10^38

或 3.40282346×10^38 见http://en.wikipedia.org/wiki/IEEE_754

准确值为 2^128 - 2^104 = 340282346638528859811704183484516925440

使用 IEEE 754 双精度(64 位),限制为 2^1024-2^971,即大约 1.7976931348623157e308

于 2012-08-16T16:55:49.147 回答