프로그램은 사용자에게 동전을 뒤집을 횟수 (n; 시도 횟수)를 묻습니다.확률 계산 C++ Bernoulli 평가판
성공은 머리로 간주됩니다.
완벽하게 프로그램은 0과 1 사이의 난수를 만듭니다. 0은 머리와 성공으로 간주됩니다.
그러면 프로그램은 머리의 x 양을 얻는 예상 값을 출력한다고 가정합니다. 예를 들어 동전이 "큰"숫자와 함께이 일을 할 때 공식
nCk * p^k * (1-p)^(n-k)
Expected 0 heads with n flips: xxx
Expected 1 heads with n flips: xxx
...
Expected n heads with n flips: xxx
을 사용하여 다음과 같은 확률 무엇인지 4 번 뒤집힌 경우, 숫자는 이상한 값으로 나올. 입력에 15 또는 20이 입력되면 발생합니다. 나는 xxx가되어야하는 값에 대해 0과 음수 값을 얻었습니다.
디버깅을 통해 nCk가 음수로 나오고 상위 값으로 올바르게 표시되지 않고 문제가 있다는 것을 알았습니다. 내 조합이 공식을 사용
long fact(int x)
{
int e; // local counter
factor = 1;
for (e = x; e != 0; e--)
{
factor = factor * e;
}
return factor;
}
어떤 생각 :
여기double combo = fact(n)/fact(r)/fact(n-r);
내 사실 기능에 대한 psuedocode입니까? 내 추측은 내 계승 또는 콤보 함수가 최대 값이나 뭔가를 초과하고 있습니다.
정수 오버플로가 발생할 수 있습니다. 사실 함수에 대해 유형을 두 배로 변경하고 더 높은 값이 받아 들여지는지 확인하십시오. –
여기에 : http://stackoverflow.com/a/4701106/576911 오버플로의 위험을 최소화하고 nCk를 계산하는 방법이며, 오버플로가 발생하면 자동으로 그렇게하지 않습니다. –