2017-03-13 4 views
0

rand() % a + bは、aとbの両方を含むaとbの間の数値を返します。私はこれを誤解する必要があります。int rのコードを実行すると2、3、または4が返されるためです。もちろん、2または3を返すことを期待しています。私はsrand(time(NULL));をメインに呼び出しています。 #include <time.h>#include <stdlib.h>
私に何か不足していますか?rand()は1の数値が高すぎますか?

int r = (rand() % 3) + 2; 
    if (r ==2) 
     g_fan.draw(r); // skin == 2 
    else 
     g_fan.draw(1 + r); //skin == 4 
+4

'X%3'はセット(0,1,2)になっていますので、 (2,3,4) – apokryfos

+1

これが['std :: uniform_int_distribution'](http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution)がすばらしい理由です。 – NathanOliver

+0

ありがとう、私はあなたがそれのようにそれを言うまで、これを得たことはありません。私はいつも 'rand()%100 + 1'の例を見てきましたが、常に' rand()%max + min = minとmaxの両方を含む 'と考えていました。私は今それを完全に得る。とても有難い。 –

答えて

8

rand() % a + babの両方を含むabの間の数値を返すことを私の理解です。

いいえb(a+b-1)の両方の数値になります。

rand() % aの値の範囲は、0a-1です。

したがって、rand() % a + bの値の範囲は、b(a-1+b)の両方です。

auto interval = (b-a+1); 
auto result = a + rand() % interval; 
0

numあなたはランドを(呼び出すことによって取得)、あなたは3と%をすれば、可能性がある任意の数でみましょう:

ab、両方を含む、使用の間のランダムな値を取得するにはこれらの番号0の1、1、2

を得るため、あなたは2、3、4を得ている:

int r = (rand() % 3) + 2; 
0
あなたは、各番号にT2を追加する

rand() % 3は、a - 1に一般的なリターンの2〜4 rand() % a関数値フォーム0が返されることを意味し、0と2の間の数を返します。 rand() % a + bを実行すると、結果の値は0 + ba - 1 + bの範囲になります。

2と3の間の値を取得するには、使用:

int r = (rand() % 2) + 2; 

folloing rand()関数は1である、2 - 10の数を与えます。それぞれの数値に2を加えると、0 + 2の範囲が得られます。これは2で2 - 1 + 2、つまり3になります。

関連する問題