편집 : 결과적으로 나는 C 버전의 테스트 코드에 시드 값을 입력했습니다 (이 질문에 붙여 넣은 것과 같지 않음). 그래서 다른 출력을 얻고있었습니다. 모두에게 감사드립니다.간단한 PRNG 알고리즘은 다른 Python/C 출력 - 정수 오버 플로우 차이가 있습니까?
C 프로그램에서 의사 난수를 생성 한 다음 나중에 시드를 파이썬 프로그램에 전달하고 동일한 숫자를 생성해야합니다.
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
그러나 이러한 두 다른 값을 산출한다. C 구현 오버플로에서 next
것 같아요, 그 이유는 두 가지 기능을 다른 값을 생성합니다. 그러나 파이썬 숫자에는 명시적인 형식이 없으며 오버플로가 없으며 서명도 없습니다. 어떻게하면 파이썬에서이 동작을 복제 할 수 있습니까?
미리 감사드립니다.
'next'라는 이름을 덮어 쓰는 것은 실제로 매우 순진합니다. – wim
필자는 C 언어에서는 십진수 값이 잘리고 파이썬에서는 그렇지 않다라고 생각한다. – Topo
내장 된 파이썬 숫자에는 명시적인 형식이있다. 그들은 더 현대적인 언어이기 때문에 정당하게 행동합니다. 귀하의 질문에 귀하의 C 코드/플랫폼에서 생성 된 처음 몇 숫자를 제공 할 수 있습니까? – wim