rand()%range + lowerとはどういう意味ですか?[閉まっている]
Dec 18 2020
私は今Cを学んでいますがrand() % range + lower
、このコード行の意味がわかりません。
printf("I will generate 10 random numbers between %d and %d . . .\n", lower, upper);
int range = upper - lower+1;
for(int i = 0; i <= 10; i++) {
int number = rand() % range + lower;
printf("%d\t", number);
回答
SergeBallesta Dec 18 2020 at 18:24
これは貧乏人の線形ランダムジェネレータです。
はrand()
ランダムな整数を返すから供給されるため、実際にはランダムであり、構造上、値は> =下限、<=上限です。
ただし、[下限、上限]間隔の値の確率が異なる可能性があるため、これは依然として貧弱なツールです。
簡単に言うと、ランダムな値が必要な場合に使用できますが、暗号化された安全なランダムソースが必要な場合は使用しないでください。
JhnW Dec 18 2020 at 18:32
abut%演算子をお読みください。モジュロ除算です。モジュロ除算は、最大範囲を最短範囲(この場合はrand()%range)に均一にマッピングするための優れたツールです。すべての値を正しい位置にシフトするには、範囲の開始を追加する必要があります。コードrand()%range + lowerは、A、B範囲から乱数を取得するための標準的なCイディオムです。たとえば、(A、B)範囲または<A、B>範囲の浮動小数点数の場合など、より多くのイディオムを見つけることができます。