4

私が欠けているもの:

In [66]: import numpy as np

In [67]: np.float(7.0 / 8)
Out[67]: 0.875 #OK

In [68]: np.float32(7.0 / 8)
Out[68]: 0.875 #OK

In [69]: np.float96(7.0 / 8)
Out[69]: -2.6815615859885194e+154 #WTF

In [70]: sys.version
Out[70]: '2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)]'

編集。cygwinでは、上記のコードは問題なく機能します。

$ python
Python 2.5.2 (r252:60911, Dec  2 2008, 09:26:14)
[GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.float(7.0 / 8)
0.875
>>> np.float96(7.0 / 8)
0.875

完全を期すために、私はこのコードをプレーンpython(Ipythonではない)でチェックしました:

C:\temp>python
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.float(7.0 / 8)
0.875
>>> np.float96(7.0 / 8)
-2.6815615859885194e+154
>>>

編集

Numpyのtracサイトで3つのバグレポート(976、902、および884)を見ましが、これ文字列表現に関連していないようです。したがって、私は新しいバグ(1263)を開きました。ここで進捗状況を更新します

4

3 に答える 3

2

これは私にとってはうまくいきます:

In [1]: import numpy as np

In [2]: np.float(7.0/8)
Out[2]: 0.875

In [3]: np.float96(7.0/8)
Out[3]: 0.875

何のNumpyを使用していますか?Python2.6.2とNumpy1.3.0を使用しており、64ビットVistaを使用しています。

Python2.5.2とNumpy1.2.1で32ビットXPを実行している別のコンピューターでこれと同じことを試しましたが、驚いたことに次のようになりました。

In [2]: np.float96(7.0/8)
Out[2]: -2.6815615859885194e+154

調査の結果、Python2.6.3とNumpy1.3.0を32​​ビットXPにインストールしたところ、次のことがわかりました。

In [2]: np.float96(7.0/8)
Out[2]: 0.875

したがって、古いバージョンのNumpyのバグか、古いバージョンのPythonのバグである必要があります...

于 2009-10-14T13:17:49.200 に答える
2

この問題は、mingwコンパイラ(公式のnumpyバイナリに使用されるコンパイラ)とMSランタイム(printfが由来するコンパイラ)の間の非互換性が原因で発生します。

MSコンパイラはlongdoubleとdoubleを同等の型と見なし、MS Cランタイム(printfを含む)も同等と見なします。Mingwは、何らかの理由で、80ビットの拡張精度の数値を保持するのに十分な大きさのlong doubleを定義していますが、もちろんMS printfはそれを認識しておらず、longdoubleを正しく出力できません。

独自のフォーマット関数を使用していくつかの問題を回避しましたが、本当の修正は、mingwでビルドしたときにlongdoubleをdoubleの同義語にすることだと思います。これはnumpy1.5.0で行われると思います。

于 2009-11-25T15:51:13.520 に答える
1

1.3.0のWindowsでの長い二重フォーマットの問題に対するいくつかの修正がありました。少なくとも http://projects.scipy.org/numpy/changeset/6219http://projects.scipy.org/numpy/changeset/6218http://projects.scipy.org/numpy/changeset/6217 _ _

于 2009-10-15T20:03:14.263 に答える