私はMATLABコードをPython 3.5.1に移植していますが、浮動小数点丸め問題を発見しました。 MATLABでPythonでの丸め/切り上げ基準
次数が6位小数点第2位をまでを丸められ、:Pythonで
fprintf(1,'%f', -67.6640625);
-67.664063
、一方で、以下の番号は第六小数点第2位をオフを丸めています。
print('%f' % -67.6640625)
-67.664062
興味深いことに、数は '-67.6000625'、それはでもPythonで切り上げられている場合:
print('%f' % -67.6000625)
-67.600063
...どうしてですか? Pythonで四捨五入する基準は何ですか? (これは16進数値の扱いと関係していると思います)
もっと重要なことに、どうすればこの違いを防ぐことができますか? 私は、MATLABが生成するのと全く同じ出力を再現できるPythonコードを作成することになっています。
私は好奇心が強いので、私はこれもnumpyでも同様に振る舞いました。私が得たものは奇妙だった。 'np.around(a、6)'(aを最初の値にする)は、-67.664062000000001を返します。 2番目の値は-67.600061999999994です。 [公式のpythonのドキュメント](https://docs.python.org/3/tutorial/floatingpoint.html)では、この動作について説明しています。 – Vinay87
私はCとOctaveの両方を試してみましたが、それらはすべてPythonと同じ '-67.664062'を表示します。 – kennytm
トリッキーな浮動小数点の比較が(3.0 * 2.2!= 2.0 * 3.3のように)どうしてあったかを考えると、私はプロジェクトの実行可能性に疑問を呈して始めます。 2つの浮動小数点数を比較するベストプラクティスは、常に差をある程度の許容誤差と比較することです。 – jadsq