rand()を使うときは上位ビットをとるとか工夫しないで
rand()%nでいいんじゃないの?
最近の(とういうかだいぶ前から)処理系は下位ビットだから
極端に周期が短いとかないでしょ。
>>41 も本当は
return about + (int)(rand() / ((double)RAND_MAX+1) * width);
だろうし、変に工夫してバグってる例をよく見る。