srand()は1回だけでいいダルォォン?
C言語のrand()
はsrand()
でシード値を与えないと、同じ乱数が出てくる。
そこでsrand((unsigned)time(NULL));
で現在時刻をシード値として与える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand((unsigned)time(NULL)); for (int i = 0; i < 100; i++) { printf("%d\n", rand()); } return 0; } |
しかしっ!
このように何度もsrand()
するとかやりだしたぞこいつ・・・。
一体何がしたいんだ!
1 2 3 4 5 6 7 8 9 |
long CALLBACK WndProc(HWND hWnd,UINT iMsg,WPARAM wParam,LPARAM lParam) { switch(iMsg) { case WM_TIMER: srand((unsigned)time(NULL)); ... } } |
こうすることで
- シード値毎回セット
- シード値が1秒に1回しか変わらない
- よって
rand()
の出力も1秒に1回しか変わらない
という事態が発生し、「あれ〜?なぜか値があまり変わらないな〜」などと嘆くようになったのだった。
—完—
というか乱数発生の仕組みを軽く触れたことがあったのにどうしてこうなった。