numpy.oldnumeric.float32小数字溢出(1e39--->;inf)python

numpy.oldnumeric.float32小数字溢出(1e39--->;inf)python,python,types,floating-point,overflow,numeric,Python,Types,Floating Point,Overflow,Numeric,我正在编写一个代码,需要在服务器上使用旧版本的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.z

我正在编写一个代码,需要在服务器上使用旧版本的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',它有足够的容量

您正在使用单精度浮点…
在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参见

精确值为2^128-2^104=3402834663852885981170418348451516925440


使用IEEE 754双精度(64位),限制为2^1024-2^971,即大约1.7976931348623157e308 在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参见

精确值为2^128-2^104=3402834663852885981170418348451516925440


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

对于记录,似乎数字甚至没有双浮点精度支持。。。。作为一种解决方法,我将存储我的值的log10()#为了记录在案,似乎Numeric甚至没有双浮点精度支持。。。。作为一种解决方法,我将存储我的值的log10()#瘸的