상대적 오류 가 낮은 배정 밀도 부동 소수점에서 다음 함수를 구현하려고합니다 .
이는 통계적 응용 프로그램에서 광범위하게 사용되어 로그 공간에 표시되는 확률 또는 확률 밀도를 추가합니다. 물론 또는 는 쉽게 오버플로 또는 언더 플로가 될 수 있습니다. 로그 공간은 처음에 언더 플로를 피하기 위해 사용되므로 좋지 않습니다. 이것이 일반적인 해결책입니다.특급 ( y )
에서 취소 가 발생하지만 의해 완화됩니다 . 더 나쁜 것은 와 가 가까이있을 때입니다. 상대 오차도는 다음과 같습니다.exp x l o g 1 p ( exp ( y − x ) )
플롯은 에서 곡선의 모양을 강조 하여 취소가 발생합니다. 최대 까지의 오류를보고 훨씬 더 나빠질 것으로 의심됩니다. FWIW의 "지상 진실"기능은 128 비트 정밀도의 MPFR 임의 정밀도 부동 소수점을 사용하여 구현됩니다. l o g s u m ( x , y ) = 0 10 − 11
나는 다른 결과를 시도했지만 모두 같은 결과를 얻었습니다. 함께 외측 식과 같은 에러 1. 가까운 것을 로그를 취함으로써 발생 외측 식과 취소는 내부 식 일어난다.l o g 1 p
이제 절대 오류는 매우 작으므로 는 엡실론 내에서 상대적 오류가 매우 작습니다. 의 사용자 가 실제로 로그 확률이 아닌 확률에 관심이 있기 때문에이 끔찍한 상대 오류는 문제가되지 않습니다. 일반적으로 그렇지 않을 수도 있지만 라이브러리 함수를 작성 중이며 클라이언트가 반올림 오류보다 훨씬 나쁘지 않은 상대 오류를 계산할 수 있기를 바랍니다.l o g s u m
새로운 접근법이 필요한 것 같습니다. 무엇일까요?