編集:結局のところ、Cバージョンのテストコードでシード値を入力したため(この質問に貼り付けたものと同じではありませんでした)、異なる出力が得られました。みんな、ありがとう。
Cプログラムで疑似乱数を生成し、後でシードをPythonプログラムに渡して、同じ数を生成する必要があります。
PRNGは私が頭の中で考えているものなので、実装を調べました(Cで):
static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
そしてナイーブなポート:
next = 1
def myrand():
global next
next = next * 1103515245 + 12345
return (next / 65536) % 32768
ただし、これらは両方とも異なる値を生成します。next
Cの実装ではオーバーフローが発生していると思います。そのため、2つの関数は異なる値を生成します。しかし、Pythonでは、数値には明示的な型がなく、オーバーフローせず、符号なしではありません。この動作をPythonで複製するにはどうすればよいですか?
前もって感謝します。