2017-06-07 4 views
4

Python3.6、ディストリビューションAnacondaを2台の異なるマシンにインストールしました。私は同じインストーラファイルを使用しているとは断言できませんが、私はそう思っています。私は、小さな数値の違いを得ていた In the server machine In the local machinenumpy.exponentialわずかに異なる動作

:私は、Python、アナコンダとnumpyのバージョンをチェックしようとすると私は同じを参照してください。いくつかのデバッグの後、私は問題をnumpy.expの呼び出しに減らすことに成功しました。ただ、私は2番目( 'ローカル')マシンで

The exponential of -0.1559828702879514361612223 is 0.8555738459791127903386609 

The exponential of -0.1559828702879514361612223 is 0.8555738459791129013609634 
最初の( 'サーバ')マシンで

を取得するコード

import numpy as np 

x = -0.1559828702879514361612223 
y = np.exp(x) 
print("The exponential of %0.25f is %0.25f" % (x, y)) 

を実行しています。

浮動小数点数は25進精度ではないことがわかっていますが、これらの違いはコード内で伝播しており、12桁目の小数点付近で発生します。

異なる動作の理由は何でしょうか?

+1

これは価値がありますが、私はあなたの「サーバ」と同じ出力を得ていますが、より新しいnumpyと古いPythonを持っています。多分プロセッサーと関係がありますか? –

+1

コードをイメージとして含めないようにしてください。検索エンジンの手の届かないところに置くようにしてください。 –

+0

@IgnacioVergaraKausel Thx。たぶんあなたは正しい、私は結果がプロセッサに依存しないと思ったが、多分そうではないかもしれない。おそらく無知から、私はそれが不安に思える場合です:私は私のマシンを交換し、私の番号が変更されますか? – zeycus

答えて

1

これは実際にはNumPyではなく、浮動小数点演算の結果がシステムに依存するということです。代わりにmath.expを使用すると、NumPyなしで同じ結果が得られます。単純な例では、別の私のコンピュータのいずれかと2.22e-16上に正確0返し

math.exp(2**(-53)) - 1 

です。 math.expm1(2**(-53)) = 1.11e-16の計算が示すように、これらの両方とも同様に間違っています(これは偶然にも、これが関数expm1が存在する理由です)。

ところで、CPU依存関係は、2つのシステム間で異なる数字が役に立たないことを明確に示しています。焦点を当てるのは、loss of significanceを減らすための計算を整理することです。

+0

ありがとうございました@alex、あなたの例は非常に明るいです。私はそのようなCPU依存性については全く気づいていませんでしたが、今後はそうしていきます。 – zeycus

関連する問題