【初心者歓迎】C/C++室 Ver.62【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0665デフォルトの名無しさん
2008/12/29(月) 21:42:59順番を変えて考えるべし。
rand() / (double)RAND_MAX とした場合、
rand() が 0 〜 RAND_MAX の値を返すのだから、
rand() / (double)RAND_MAX は 0 〜 1 の値になる。
このまま (max-min+1.0) をかけると 0 〜 max-min+1 の値になり、
min を足すと 0 〜 max+1 の値になる。
rand() が RAND_MAX を返した時だけ、max+1 が現れてしまうことになるわけだ。
これに対し、rand() / (1.0+RAND_MAX) とした場合は
0 〜 RAND_MAX/(1+RAND_MAX) の値になる。
RAND_MAX/(1+RAND_MAX) は 1 より少し小さくて、
上記のような問題は発生しない。
■ このスレッドは過去ログ倉庫に格納されています