以下は、あるオープンソース プロジェクトの rand() からコピーされたもので、LCG を使用しています。
rand_next = rand_next * 1103515245L + 12345L; //unsigned long rand_next
古典的なLCGは次のとおりです。
次 = (次 * a + c) mod M
明らかに、ここで M は 2^32 です。
私を混乱させているのは、rand_next * 1103515245L です。ここで、オーバーフローが発生すると確信しています。いくつかの rand() 実装を見てみましょう。異なる a と c を使用することを除いて、すべてこの方法を取ります。
そのオーバーフローは有害ですか?そうでなければ、なぜですか?
ありがとう