問題タブ [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 - Detours で非決定論を減らしますか?
フック (Detours など) を使用して、任意のアプリケーションで非決定性を取り除くことができるかどうか疑問に思っていました。
シングル スレッド アプリケーションを想定できます (競合とスケジューリングによって引き起こされる非決定論を無視するため)。
rand()
私の最初の推測は、シードに関係なく、疑似乱数を要求する関数に対して予測可能で再現可能な出力を得るためにオーバーライドすることでした。
オーバーライドを検討する必要がある、よく使用される他の関数はありますか?
ここに完璧な解決策がないことはわかっていますが、ほとんどのアプリケーションで機能するものでおそらく解決できます。また、この問題を解決する別の方法があれば、それについて読むことに興味があります。
c++ - シミュレーションを決定論的にする (qemu ベースのシミュレーター)
QEMU を使用する Marss cycle-accurate シミュレーターを使用しています。これは完全なシステム シミュレータであり、ユーザーとカーネルの両方の統計情報を提供します。ただし、ユーザー統計のみを取得したとしても、統計は実行ごとに大きく異なります。marss サイトでこの質問をしましたが、良い回答が得られませんでした。それがqemuと関係があるのだろうかと思っていました。または、シミュレーションを決定論的にすることができるqemuオプション/バリエーション。-icount auto を使用してみましたが、まだいくつかのバリエーションがあります。単純なスカラーの eio ファイルでは、変化を観察したことはありません。助けていただければ幸いです。
list - いくつかの決定論を伴う member/2 のコード
最後の要素に確定性がある member/2 をコーディングするにはどうすればよいですか。現在私は使用しています:
次のクエリを実行すると:
まだ選択肢が残っているので、インタプリタは 2 を返した後も検索を続けます。これがもう起こらないようにするにはどうすれば member/2 を実装できますか?
しかし、member/2 の完全なセマンティクスは保持する必要があります。つまり、次のような回答です。
以前と同じように動作するはずです。
さよなら
haskell - 並列 haskell プリミティブ (par および pseq) が決定論的であるのに、並列 haskell が非決定論的であるのはなぜですか?
Haskell の並行処理と並列処理のコンテキストにおける決定論をよく理解していません。いくつかの例が役に立ちます。ありがとう
sql-server - T-SQL決定論的INTキャスト
与えられた:
- SQLサーバー
- と呼ばれるテーブル
TEST_TABLE
- タイプの
TEST_TABLE
呼び出された列TEST_FIELD
VARCHAR(50) NOT NULL
- 行1:10YR3 / 6
- 行2:10YR3 / 2
- クエリ:
SELECT TEST_FIELD FROM TEST_TABLE WHERE ...
質問:
私のwhere条件では、文字列の最後の文字の値をテストする必要があります。Where句で次のことを行っているのと同じ動作に気づきました。
RIGHT(TEST_FIELD,1) > 3
CAST(RIGHT(TEST_FIELD,1) AS INT) > 3
ケース1の推測されたキャストを通じて、同じように動作していますか?ケース1は決定論的ですか?
前もって感謝します。
マット
java - X/Y 座標から決定論的に疑似ランダム パターンを生成するにはどうすればよいですか?
2D マップ上で時折点を輝かせるシェーダーを作成しています。(「きらめき」は単に明るい色のピクセルです。) きらめくブロックを (無限の) 平面上にランダムかつ均一に分散させて表示したいのですが、X 座標と Y 座標に基づいてきらめきを決定論的にしたいと考えています。座標からシードを作成し、そのシードから Java を作成しようとしましたRandom
が、これまでのところ、認識可能なパターンが得られました。この関数は頻繁に (何百万回も) 呼び出されるため、パフォーマンスが重要です。
hashCode()
最初に、素数乗数を使用して衝突を回避する実装を模倣しようとしました。これにより、一連のポイントが同じシードを共有するマップ全体に目に見える切り傷が生じました。
次に、次のように座標を連結してシードを作成しようとしました。
パターンは明らかではありませんが、これもパターン化されたデータになるようです。選択した座標が一列に表示され、均等に配置されていません。
パフォーマンスへの影響が懸念されるため、MD5 やその他の暗号化ハッシュ アルゴリズムの使用は避けています。
objective-c - NSNotificationはスーパークラスで観察され、スーパークラスと子クラスで処理されます
ParentClass
NSNotificationを監視するクラスがあります。ParentClassが通知を処理します。ChildClass
ParentClassを継承し、通知も処理します。通知が配信される順序は決定論的ですか?
言い換えると、ParentClassは常にChildClassの前に通知を処理しますか、またはその逆ですか?
c - アトミック浮動小数点演算の確定性を確保するために丸めを使用できますか?
浮動小数点決定論を必要とする C アプリケーションを開発しています。また、浮動小数点演算をかなり高速にしたいと考えています。これには、サインや対数など、IEEE754 で指定されていない標準の超越関数が含まれます。私が検討したソフトウェア浮動小数点の実装は、ハードウェア浮動小数点に比べて比較的遅いため、各回答から最下位ビットの 1 つまたは 2 つを単純に丸めることを検討しています。精度の低下はアプリケーションにとって十分な妥協ですが、これはプラットフォーム全体で決定論的な結果を保証するのに十分でしょうか? すべての浮動小数点値は double になります。
演算の順序が、浮動小数点の結果のばらつきのもう 1 つの潜在的な原因であることは認識しています。私はすでにそれに対処する方法を持っています。
今日使用されている主要な浮動小数点ハードウェア実装のソフトウェア実装があれば素晴らしいので、このような仮説を直接テストできます。
c++ - メモリが非常に限られている組み込みシステム内の STL
私は現在、64 KB の SRAM を搭載した ARM Cortex M3 プロセッサを使用して組み込みシステムを構築中です。現時点では、STL コンテナーで決定論的なパフォーマンスを確保する方法を探しています。これには、実行時にメモリ不足にならないようにすることも含まれます。
私は主に、STL コンテナーが動的メモリ割り当てを実行する方法に関心があります。カスタム アロケータを使用して、これらの構造体が確保したプールからメモリを取得することはできますが、構造体の 1 つのインスタンスが別のインスタンスのスペースを占有できないようにするために、構造体ごとに個別のプールをセットアップする必要があります。
私はこのプロジェクトで、メモリの未加工の割り当てに関心がなく、「よく知られている」データ構造 (スタック、キュー、デキューなど) を利用できることを好む他の個人と協力しています。したがって、私は現在、これらの構造を提供するために C 配列のラッパーを構築することを検討しています。これにより、これらのコンテナーをサポートするために必要なメモリーの静的割り当てが可能になり、他の開発者は、コンパイラーによって提供されるコードサイズ情報に基づいて、実行前にインスタンス化したコンテナーのサイズを知ることができます。私の意見では、これにより実行時にメモリ不足の問題が発生しないことが保証され、システム設計が大幅に簡素化されます。
もう 1 つのオプションは、システムの初期化時に STL コンテナーを割り当てることです。初期化期間の後、追加の動的メモリ割り当ては発生しません。ただし、私の知る限り、標準の C++ STL データ構造はこれをサポートしていません。スタックなどのコンテナーを事前に割り当てることができる必要があります (ベクターに似ています)。
標準 C 配列を中心にクラスを構築するという私の提案について、何かコメントをいただければ幸いです。さらに、静的サイズのスタックやキューなど、静的サイズの STL コンテナーをコンパイル時に割り当てる簡単な方法はありますか? (これはベクトルで可能であることは知っていますが、他のものはわかりません)
注: 別の質問 ( Embedded C++ to use STL or not ) を読みましたが、この質問の作成者は、メモリの量 (ARM7 プロセスの使用方法以外) を明らかにしていませんでした。私に似た解決策を検討しています。
2 番目の注意: 一部の開発者にとっては、64 KB の SRAM が大量のメモリに見えるかもしれません。実際、メモリが大幅に少ない AVR プロセッサで開発を行ったことがあるので、この観点は理解できます。しかし、私の現在の (おそらく無知な) 見方からすると、STL コンテナーについて話す場合、64 KB のメモリはそれほど多くはありません。
java - Runnableの時間決定論的実行
Runnableオブジェクトを指定します。
正確な数の操作を実行できるようにしたいです。
そのため、初めてこの実行を行うと、次のようになります。
それ以外の場合、同じパラメーターを使用してメソッドを呼び出すと、同じポイントまで実行されます。
私は周りを見回しましたが、適切なものが見つかりません(たとえば、ScheduledThreadPoolExecutorは私が知る限り機能しません)。
これを機能させるには、バイトコードレベルに移動する必要がありますか?私が読んだことから、JITはここでも問題を引き起こす可能性があります。