0

random_number=a+rand()%b;C で a と b (b を含まない) の間の乱数を生成する理由を知りたいと思っていました。しかし、Java ではこのコードは機能しません。Javaでこれを行う正しい方法は理解していますがrandom_number=a+(Math.random()*(b-a));、なぜ違いがあるのか​​ 知りたいと思いましたか? 数学的には同じ演算ではないでしょうか。また、ランダム関数の戻り値の型が異なることも理解していますが、この違いは出力の違いをどのように説明していますか? これが些細な質問のように思われる場合は申し訳ありませんが、それでも興味がありました。

4

3 に答える 3

6

違いは、各乱数発生器の機能にあります。

Java では、(これを含む) ~ (含まない)Math.Randomの範囲の疑似乱数を返します。したがって、範囲の幅である だけ拡大してから、範囲の開始であるだけシフトする必要があります。01b - aa

C では、から(my is )までrand()の範囲の数値を返すため、 は範囲の幅を制御するために使用され、範囲の開始は だけシフトされます。0RAND_MAXRAND_MAX32767%ba

于 2013-09-30T19:33:06.153 に答える