.NET アプリケーション (C# など) での浮動小数点計算が常に同じビット単位の正確な結果を生成することを保証するにはどうすればよいですか? 特に、異なるバージョンの .NET を使用し、異なるプラットフォーム (x86 と x86_64) で実行している場合。浮動小数点演算の不正確さは問題ではありません。
Java では、strictfp を使用します。C/C++ やその他の低レベル言語では、この問題は基本的に FPU/SSE 制御レジスタにアクセスすることで解決されますが、.NET ではおそらく不可能です。
FPU 制御レジスタを制御しても、.NET の JIT は異なるプラットフォームで異なるコードを生成します。この場合、ホットスポットのようなものはさらに悪いでしょう...
なぜそれが必要なのですか?高速浮動小数点演算とロック ステップ シミュレーションに大きく依存するリアルタイム ストラテジー (RTS) ゲームを作成することを考えています。基本的に、ネットワーク経由でユーザー入力のみを送信します。これは、ユーザー入力を保存することでリプレイを実装する他のゲームにも当てはまります。
オプションではありません:
- 小数(遅すぎる)
- 固定小数点値 (sqrt、sin、cos、tan、atan を使用すると遅すぎて扱いにくい...)
- FPS のようにネットワーク全体で状態を更新する: 数百または数千のユニットの位置情報を送信することはオプションではありません
何か案は?