1

Lua 5.2.1 で乱数を生成してみました

num = math.random(9)

ただし、プログラムを実行するたびに:

num = math.random(9)
print("The generated number is "..num..".")

私は同じ番号を取得します。

brendan@osiris:~$ lua number 
The generated number is 8.
brendan@osiris:~$ lua number 
The generated number is 8.
brendan@osiris:~$ lua number 
The generated number is 8.

新しい番号を生成してプログラムを再起動しようとするたびに、同じシーケンスが得られるため、これはイライラします。

数値を生成する別の方法はありますか?

また、調べてみました

math.randomseed(os.time())

しかし、私は本当にそれを理解していません。これが実際に解決策である場合、それがどのように機能し、何をし、どのような数値が得られるかを説明していただけますか?

どうも、

  • ブレンダン
4

3 に答える 3

5

これは Lua に限ったことではありません。疑似乱数ジェネレーターは通常、次のように機能します。開始するにはシードが必要であり、生成するシーケンスは実際にはランダムではありませんが、シードが与えられると実際には決定論的です。これはデバッグには良いことですが、本番環境ではシードを「ランダムな」方法で変更する必要があります。これを行う簡単で典型的な方法は、プログラムの開始時に一度シードを設定する時間を使用することです。

于 2013-09-25T18:07:33.983 に答える
2

Lua では、これが期待される出力です。異なるセッション間で異なるシーケンスを取得することは保証されていません。

ただし、以降の呼び出しでmath.randomは新しい番号が生成されます。

>> lua
> =math.random(9)
1

>> lua
> =math.random(9)
1

>> lua
> =math.random(9)
1
> =math.random(9)
6
> =math.random(9)
2

math.randomseed()再生されるシーケンスが変わります。たとえば、設定math.randomseed(3)すると、上記のように常に同じシーケンスが得られます。

>> lua
> math.randomseed(3)
> =math.random(9)
1
> =math.random(9)
2
> =math.random(9)
3

>> lua
> math.randomseed(3)
> =math.random(9)
1
> =math.random(9)
2
> =math.random(9)
3

ただしmath.randomseed()、os.time() のように実行ごとに一意の値を設定すると、もちろん毎回一意のシーケンスが得られます。

于 2013-09-25T18:31:29.743 に答える