random_number=a+rand()%b;
C で a と b (b を含まない) の間の乱数を生成する理由を知りたいと思っていました。しかし、Java ではこのコードは機能しません。Javaでこれを行う正しい方法は理解していますがrandom_number=a+(Math.random()*(b-a));
、なぜ違いがあるのか 知りたいと思いましたか? 数学的には同じ演算ではないでしょうか。また、ランダム関数の戻り値の型が異なることも理解していますが、この違いは出力の違いをどのように説明していますか? これが些細な質問のように思われる場合は申し訳ありませんが、それでも興味がありました。
2677 次
3 に答える
6
違いは、各乱数発生器の機能にあります。
Java では、(これを含む) ~ (含まない)Math.Random
の範囲の疑似乱数を返します。したがって、範囲の幅である だけ拡大してから、範囲の開始であるだけシフトする必要があります。0
1
b - a
a
C では、から(my is )までrand()
の範囲の数値を返すため、 は範囲の幅を制御するために使用され、範囲の開始は だけシフトされます。0
RAND_MAX
RAND_MAX
32767
%b
a
于 2013-09-30T19:33:06.153 に答える