私の目標は、さまざまな CPU アーキテクチャと OS を持つ可能性のあるさまざまなマシン間で非整数を必要とするシミュレーションを実行することです。主な優先事項は、同じ初期状態が与えられた場合、各マシンがまったく同じシミュレーションを再現することです。2 番目の優先事項は、計算のパフォーマンスと精度を可能な限り倍精度浮動小数点数に現実的に近づけることです。
私が知る限り、Cのマクロ_controlfp
とマクロのように、Haskell プログラム内から浮動小数点計算の決定論に影響を与える方法はないようです。_FPU_SETCW
- Data.Ratioを使用
- Data.Fixedを使用
- 固定小数点パッケージのData.Fixed.Binaryを使用します
_ controlfp
FFI 経由で呼び出すモジュール(または各プラットフォームの同等のもの) を記述します。- おそらく、何か他のものですか?
固定小数点演算ライブラリの問題の 1 つは、三角関数や対数が定義されていないことです (Floating
型クラスを実装していないため)。シミュレーション シード データ。それとももっと良い方法がありますか?
どちらの固定小数点ライブラリもnewtype
コンストラクターを非表示にするため、(逆) シリアル化はtoRational
/fromRational
を介して行う必要があり、それは不必要なオーバーヘッドを追加するように感じます。
私の次のステップは、さまざまな固定小数点ソリューションのベンチマークを実行して実際のパフォーマンスを確認することですが、それまでの間、このテーマに関するアドバイスを喜んでお受けします.