私は、Scheme の起動randomize
時に、現在の時刻をシードとしてプロシージャーが呼び出されたという印象を受けました。ただし、Scheme スクリプトが のみで構成されている場合、(print (random 10))
受け取る出力は7
;のみです。他の番号はありません。それで、私は何を間違っていますか?記録のために、私は Chicken Scheme を使用しています。
1 に答える
0
正確には、どのランダムライブラリを使用していますか?ドキュメントによると、のシードに関するあなたの仮定random
は正しいです:
(randomize [SEED])
:乱数シードを設定します。SEED(正確な整数)が指定されていない場合は、現在の時刻が使用されます。起動時(ユニットエクストラが初期化されるとき)、乱数ジェネレーターは現在の時刻で初期化されます。
(random N)
:[0、N-1]の疑似乱数整数を返します。Nは整数です。
また、警告、特にあなたが目撃している行動を説明しているように見える2番目の警告にも注意してください。
警告:この手順では、内部でrand(3)を使用し、低品質の疑似ランダム性などの欠点を示します。
- WindowsおよびSolarisでは、[0、N-1]の範囲で生成できる一意のランダム値は32768のみです。N> = 32768の場合、結果セットにギャップがあります。
- Mac OS X、Windows、およびその他のいくつかのプラットフォームでは、近くのシードで出力にほとんど変化が見られません。ランダムジェネレーターには起動時にcurrent-secondsがシードされるため、新しいプロセスでは、最大1分間、類似または同一のランダムシーケンスが表示される場合があります。
- Linuxでは、rand(3)はrandom(3)のエイリアスであり、妥当な品質の出力を提供します。
于 2013-01-11T16:19:21.527 に答える