質問: お世話になります。 元々Javaで実装されていたプログラムを、 Pythonを用いて実装したプログラムがあるのですが、 数字の型の違いにより(?)、小数点の計算結果に差異が出てしまっている状態です。 1 Java :Double型 2 Python:Decimal型 となっています。Decimal型の方がより小数点が長い計算となっているようです。 少数点の掛け算を複数回行っているため、徐々に差が大きくなってしまっています。 改修範囲の都合上、 2のプログラムを1に合わせたいのですが、 PythonでDouble型を使うことは可能でしょうか? この1,2のプログラムは共存する必要があり、同様の処理を行っているのですが、 2のプログラムがなぜDecimal型で実装されたかなどの経緯が分からず。。 情報不足で申し訳ありませんが、ご指摘頂ければ幸いです。 宜しくお願い致します。
回答: Java の Double型は primitive 型の double をラップしてオブジェクトにしたもので、これに該当する型は Python では float になります。 decimal の 公式ドキュメント には「decimal — 十進固定及び浮動小数点数の算術演算」と書いてあるとおり、double とは異なるものですので、Java の Double 型の計算結果と同一にしたい場合は Decimal で実装されている箇所はすべて float に置き換える必要があります。 Java の double と Python の float は IEEE754 の浮動小数点規格に従っているので、計算結果が同一になることが保証されています。 | | 32bit 浮動小数点数 (単精度) | 64bit 浮動小数点数 (倍精度) | | --- | --- | --- | | C/C++言語 | float | double | | Java | float | double | | Python | なし (外部ライブラリでは numpy の float32) | float |