>백엔드 개발 >C++ >확률 계산에서 예상치 못한 결과가 나타나는 이유는 무엇입니까?

확률 계산에서 예상치 못한 결과가 나타나는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-09 07:01:02722검색

Why Does My Probability Calculation Produce Unexpected Results?

부동 소수점 오류 탐색: 간단한 예

부동 소수점 변수를 둘러싼 대화에서는 종종 "오류"의 가능성이 언급됩니다. 이 개념은 주어진 퍼즐의 맥락에서와 같이 문제 해결을 연습할 때 특히 관련될 수 있습니다.

다음을 고려하십시오. 10번의 독립적인 시행에서 정확히 2번의 성공을 얻을 확률을 찾으려면 다음 공식을 활용했습니다. :

p_2x_success = pow(1-p, (double)8) * pow(p, (double)2) * (double)choose(8, 2);

부동 소수점 오류 문제

이 경우 부동 소수점 오류 잠재적인 문제가 됩니다. 부동소수점 변수는 컴퓨터에서 실수를 표현하기 위해 활용되지만, 저장 공간과 처리 능력의 한계로 인해 정확하게 표현되지는 않습니다. 결과적으로 부동 소수점 연산을 수행할 때 오류가 누적될 수 있습니다.

이를 설명하기 위해 함수 f(k)를 로그 스케일의 그래프를 사용하여 시각화해 보겠습니다.

[XY 그래프 이미지 로그 스케일의 X 및 Y 포함]

컴퓨터가 반올림 오류 없이 32비트 부동 소수점을 완벽하게 표현할 수 있다면 모든 k에 대한 결과는 다음과 같습니다. 영. 그러나 k가 증가함에 따라 부동 소수점 오류 누적으로 인한 오류가 증가하는 것을 목격합니다.

C의 복제

다음을 구현하여 C에서 이 동작을 복제할 수 있습니다. 코드:

for (int k = 1; k < 1000; k++) {
  cout << "k = " << k << ", error = " << (pow(1-k, (double)8) * pow(k, (double)2) * (double)choose(8, 2)) << endl;
}

결론

이것 간단한 예는 부동 소수점 연산을 수행할 때 부동 소수점 오류가 발생할 가능성을 보여줍니다. 수치계산을 구현할 때 이러한 현상을 인지하고 고려하는 것이 중요합니다.

위 내용은 확률 계산에서 예상치 못한 결과가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.