問題タブ [deterministic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 決定論的プロセスが浮動小数点エラーを生成する原因となるもの
すでにこの質問を読んだので、同じ入力 (同じハードウェア上で、同じコンパイラでコンパイルされた) で浮動小数点演算を使用する特定のプロセスが決定論的であるべきであると合理的に確信しています。これが正しくないケースを調べており、何が原因なのかを突き止めようとしています。
実行可能ファイルをコンパイルし、まったく同じデータを単一のマシン (非マルチスレッド) で実行していますが、約 3.814697265625e-06 のエラーが発生しています。 /4^9 = 1/2^18 = 1/262144. これは、32 ビット浮動小数点数の精度レベルにかなり近い (ウィキペディアによると約 7 桁)
私の疑いは、コードに適用された最適化と関係があるということです。Intel C++ コンパイラを使用しており、浮動小数点のスペキュレーションをセーフまたはストリクトではなく高速に変更しました。これにより、浮動小数点プロセスが非決定論的になる可能性がありますか? この動作につながる可能性のある他の最適化などはありますか?
編集: Pax の提案に従って、浮動小数点の推測を安全に変更してコードを再コンパイルしたところ、安定した結果が得られました。これにより、この質問を明確にすることができます-浮動小数点投機は実際に何をしますか?これにより、まったく同じ入力に適用されたときに同じバイナリ (つまり、1 つのコンパイル、複数の実行) が異なる結果を生成するのはなぜですか?
@Ben Intel(R) C++ 11.0.061 [IA-32] を使用してコンパイルしており、Intel クアッドコア プロセッサで実行しています。
ruby - Ruby パーサー
バックトラッキングがまったくない決定論的パーサーだけを使用してRuby言語を解析できるかどうかを知りたいですか??
deterministic - マルコフ論理による決定論の回避
今日、マルコフ連鎖ジェネレーターについて詳しく読み始めたばかりで、それを構築するプロセス全体に本当に興味をそそられています。私の理解では、将来の状態は現在までの統計的な過去の状態に依存しています。
例:
こんにちは世界。ハロードリー。こんにちは世界。
そのソースでは、「World」が「Hello」の約 66% の後に続きます。
それが常に当てはまる場合、毎回同じ結果を出力しないようにするにはどうすればよいでしょうか。統計的発生は静的文字列では変化しないので、ソースデータが何らかの方法で変更されない限り、バリアントが生成されないと仮定するのは正しいですか?
統計値を考慮しながら、ある程度の柔軟性を確保しながら、静的ソースからバリエーションを取得するにはどうすればよいですか? 上記の例を使用すると、「Dolly」が「Hello」の後に 33% の確率でしか続かない場合、ジェネレーターが「Hello」に「Dolly」を続けられるようにするにはどうすればよいでしょうか?
私が求めているのは、現在の選択に続く単語の統計的存在に基づいて、次の選択の確率をどのように基にすればよいかということです。そうすれば、"Dolly" が 33% の確率で表示され、"World" が 66% の確率で表示されます。
java - シリアル化されたオブジェクトのJava表現
Javaがオブジェクトをシリアル化するために使用する形式を探しています。デフォルトのシリアル化では、オブジェクトがバイナリ形式でシリアル化されます。特に、プログラムを2回実行すると、同じオブジェクトを異なる方法でシリアル化できるかどうかを知りたいと思います。
オブジェクトがJavaのデフォルトのシリアル化/逆シリアル化ラウンドトリップで動作を維持するために、オブジェクトはどのような条件を満たす必要がありますか?
xsd - この非決定論的XMLスキーマを決定論的に書き直す方法は?
なぜこれが非決定的であり、それを修正する方法は?
<activeyears>
これは、が空であるか、シーケンスが含まれていることを意味することになっています。シーケンスは、<from><till>
で始まり、<from>
どちらかで終わる可能性があります。
sql - ユーザー関数を決定論的にする方法
SQL Server 2008 でユーザー定義関数の決定論的な動作に基づいて最適化を達成しようとしています。
私のテストコードでは、決定論的で同じ引数値で呼び出されるため、追加の関数呼び出し dbo.expensive はないと予想しています。
私のコンセプトが機能しません。理由を説明してください。期待される最適化を達成するために何ができるでしょうか?
sql-server - この UDF を決定論的にする方法はありますか?
決定論的ではないという理由だけで、これは決定論的でDB_NAME()
はないと思いますか?が決定論的でない場合DB_NAME()
、なぜ決定論的ではないのですか?
更新:このバージョンは機能し、決定論的であり、同じコードを任意のデータベースで使用でき、データベース名のハードコーディングを削除します (これにより、データベース名のコーディングに関する別の自動システム ヘルス例外も削除できます)。
参考までに、これは、潜在的な問題を監視するために使用するシステムの状態の自己報告システムのコード スニペットです。
algorithm - 決定論的クイックソートとは何ですか?
私はクイックソートについて読んでいて、「決定論的クイックソート」と呼ばれることもあることがわかりました。
これは通常のクイックソートの代替バージョンですか?通常のクイックソートと決定論的クイックソートの違いは何ですか?
.net - 確定的浮動小数点と .NET
.NET アプリケーション (C# など) での浮動小数点計算が常に同じビット単位の正確な結果を生成することを保証するにはどうすればよいですか? 特に、異なるバージョンの .NET を使用し、異なるプラットフォーム (x86 と x86_64) で実行している場合。浮動小数点演算の不正確さは問題ではありません。
Java では、strictfp を使用します。C/C++ やその他の低レベル言語では、この問題は基本的に FPU/SSE 制御レジスタにアクセスすることで解決されますが、.NET ではおそらく不可能です。
FPU 制御レジスタを制御しても、.NET の JIT は異なるプラットフォームで異なるコードを生成します。この場合、ホットスポットのようなものはさらに悪いでしょう...
なぜそれが必要なのですか?高速浮動小数点演算とロック ステップ シミュレーションに大きく依存するリアルタイム ストラテジー (RTS) ゲームを作成することを考えています。基本的に、ネットワーク経由でユーザー入力のみを送信します。これは、ユーザー入力を保存することでリプレイを実装する他のゲームにも当てはまります。
オプションではありません:
- 小数(遅すぎる)
- 固定小数点値 (sqrt、sin、cos、tan、atan を使用すると遅すぎて扱いにくい...)
- FPS のようにネットワーク全体で状態を更新する: 数百または数千のユニットの位置情報を送信することはオプションではありません
何か案は?
sql - [date] + ([time] - [offset]) が SQL Server 2008 で決定的でないのはなぜですか?
IIS ログ テーブルに対して次のことを実行しようとしています。
ただし、SQL Server 2008 では次のように表示されます。
テーブルには次の定義があります。
なぜそれは非決定論的なのですか?
私は本当にそのフィールドにインデックスを付ける必要があります。現在、テーブルには 1598170 行あり、フルタイムでインデックス シークを実行できない場合、クエリを実行するのは困難です。これは他のいくつかのログ形式と UNION されているため、2 つの列を別々に使用することは非常に簡単ではありません。