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>範囲の浮動小数点数の場合など、より多くのイディオムを見つけることができます。