1

古いバージョンの python (2.4?) を使用してサーバー上で実行する必要があるコードを numpy ではなく Numeric で書いていますが、それについては何もできません。コードをテストするには、numpy.oldnumeric で実行します

float32 の配列から始めて、それらに値を格納します。私の値は 1.0e50-1.0e60 の範囲にあり、配列はそれらを「inf」として保存し続けます。1.0e39 をキャストしても、「inf」につながります。float は 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 に答える