1

RAND_MAX が unsigned int 変数内に収まるかどうかを判断しようとしています。C99 標準を調べたところ、RAND_MAX の値が少なくとも 32767 であることが保証されていることがわかりました。RAND_MAX が int 値に展開されることはわかっていますが、それが long int であるかどうかはわかりません。現在、unsigned long int 変数を使用していますが、ソース コードを単純化して unsigned int 変数を使用したいと考えています。

要約すると、この前提ステートメントは C99 標準に当てはまりますか?

RAND_MAX <= UINT_MAX <= ULONG_MAX

また、RAND_MAX が明示的に UINT_MAX または ULONG_MAX よりも小さい (つまり等しくない) かどうか。RAND_MAX の値がメルセンヌ素数であることが多いことは認識していますが、これが基準かどうかはわかりません。

4

3 に答える 3

13

RAND_MAXが返すことができる最大値ですrand()rand()は を返すように定義されているためintRAND_MAXは を超えることはなくINT_MAX、したがって も を超えることはありませんUINT_MAX

于 2012-11-07T16:20:49.107 に答える
3

randは署名を持っているため、 の非負の範囲はの範囲に含まれているint rand(void);ため、返される非負の値は の内部に収まる必要があります。unsigned intintunsigned int

RAND_MAXこれは <=であることを明示的に述べていませんが、 の範囲の値をの下限 32767 とともに返すINT_MAXという要件は、 の範囲をカバーすることが期待されることを示しています。.rand0RAND_MAXRAND_MAXrand0RAND_MAXINT_MAX

于 2012-11-07T16:21:10.337 に答える
0

これを試してください。

Mersenne Twister が必要なすべてのコントロールとスピードを提供するというこの質問への回答者に同意します。また、C++ プログラムへの追加も非常に簡単です。

しかし、他の多くの人が言ったように、rand() の戻り値の型 int は、実質的に RAND_MAX が UINT_MAX 未満であることを保証します。

于 2012-11-07T16:20:21.697 に答える