RNG で簡単に利用できるシードの 1 つは、任意の時間関数です。シードはランダムである必要はありません。プログラムを開始するたびに異なるものであれば、それで十分です。疑似乱数を「よりランダム」にしようとするのは、ややばかげた試みです。これが必要な場合、ジェネレーターはその価値がありません。
また、真のランダム ノイズを定期的にシードしない限り、とにかく出力を「よりランダム」にすることはありません。また、真のランダム ノイズを定期的にシードすると、シードのみが真にランダムになり、他の値は依然として決定論的であり、全体としてこのジェネレーターによって生成された他のシーケンスと同じ統計的特性があります。
歪んだ分布が受け入れられない場合に、2 の累乗以外の範囲の数値を取得するための通常の実装は、次のようになります。
range = high - low;
while((r = rand()) > range) {}
r += low;
モジュロと乗算/除算には、よく知られたスキューとオーバーフローの問題があります。
とはいえ、あなたが言ったようにAIの決定のためなら、ある結果が別の結果より1%高い可能性がある場合、誰も気付かないでしょう. したがって、単純にモジュロを使用するだけでおそらく十分であり、決定論的な時間があり、非常に単純です。また、モジュロで適切に機能する範囲をいつでも選択できることに注意してください。