狭い範囲の値にしかなっていません。102倍しても、764388~794376。この値で割ると、23.327~24.242。整数ですから、23~24。これが、最初の乱数が同じ値になる理由です。割ることは、15ビット右シフトするのと同じで、元の数の下位15ビットを捨てることになっています。下位ビットの値を利用できて、もっと良くなると思います。よる乱数の生成も問題があります。321/32768となって一様ではないということです。乱数の最初の値は同じにはなりません。返信遅れてすみません。みけcatさんありがとうございます。私がやりたかったのはまさにこういうことです。double型の方がメモリを大きく使えるからオーバーフローしにくくなるってことですかね。してdouble型の方がいいのかあまり理解できてません。かずまさんありがとうございます。要は商を使うのではなく余りで区別することでrand()で返ってきた値が近くてもバラバラな数値を得られるということですね。1の約数じゃないと同様に確からしい確率で乱数がえられないと。非常に勉強になります。1年前(rand関数からは0~RAND_MAXの整数が全て等確率で返るすると)商を使うにしろ余りを使うにしろ別の何かを使うにしろ、0~RAND_MAXの整数から欲しい範囲の整数にマップすることになるので、(RAND_MAX+1)が欲しい整数の種類数で割り切れない場合は、必ず等確率ではなくなります。等確率にしたければ、割り切れない端の部分の数が出たら捨ててやり直すのがいいでしょう。ミクプラは自由にリンクできます。