numpy.oldnumeric.float32小写(1e39>inf)python溢出

2024-04-25 17:49:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个需要在使用旧版本python(2.4?)的服务器上运行的代码用数字代替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]

给予

^{pr2}$

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


Tags: 代码numpy服务器data数字数组inf测试代码
1条回答
网友
1楼 · 发布于 2024-04-25 17:49:56

您正在使用单精度浮点…
在ieee754单精度中,指数的极限为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=3402823466385289811704183484516925440

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

相关问题 更多 >