를 계산하는 개선 된 방법이 있습니까?


11

대부분의 수학 라이브러리에는 여러 버전의 로그 함수가 있습니다. 대부분의 경우 우리는 그것들이 완벽하다고 가정하지만 실제로 상당히 많은 숫자는 특정 숫자의 정밀도를 제공합니다.

일부 기능의 경우 수치 적으로 더 안정적인 변형이 있습니다. 예를 들어, Fortran, R, Java 및 C는 (소수의 x 값에 대해 더 높은 정밀도를 제공하는) Math.log1p컴퓨팅 log(1.0+x)및 대응을 위해 expm1. 여기서 숫자 문제는 정밀도 손실로 인해 발생합니다. x실제로 작은 경우 1.0 + x시작 부분에서 1을 유지하기 위해 숫자가 손실됩니다.

여러 상황에서 정밀도가 향상되는 기능을 보았습니다. 이것은 높은 숫자 정밀도로 분포 함수 (Gamma, Beta, Poisson 등)를 구현할 때마다 매우 일반적입니다. 예를 들어 감마 기능은 대부분으로 사용 된 것으로 보입니다 logGamma. 일반적으로 "logspace"로 이동하면 정밀도가 크게 향상 될 수 있으므로 R은 대부분의 함수에 "logspace"플래그가있는 것 같습니다.

R의 다른 예 log1mexplog(1 - exp(p))다음과 같습니다. http://cran.r-project.org/web/packages/Rmpfr/vignettes/log1mexp-note.pdf

나는 엔트로피와 정보 이론적 조치를 가지고 놀았습니다. 매우 일반적인 용어가 있습니다

p * -log(p)

보통 로그의 밑 수가 e가 아닌 2가되기를 원할 것입니다. 그러나 종종 이것은 선형 요인 일 뿐이므로 자연 로그를 사용할 수도 있습니다 (따라서 이것은 중요하지 않습니다). 어쨌든이 용어를 더 빠르고 직접적이며보다 정확하게 계산하는 방법이 있는지 알고 있습니까? 나는 모든 곳에서 그것을 가지고 있기 때문에 좀 더 정확하고 빠르게 만들 수 있습니다 (일반적인 "조기 최적화"항목을 절약하십시오).

정확성을 떨어 뜨릴 분명한 이유는 없습니다. 그래서 나는이 계산 속도를 높이는 좋은 트릭이 있는지에 관심이 있습니다. 그건 어쩌면 나를 치료 저장 p=0(현명하다 코너 케이스를 0하지만, log(0)존재하지 않는) 또는 (일정한 단일 곱셈 분명 살인자 비용이 있지만) 나 무료로 2 기초를 제공합니다. 감사.


1
m10308pM10308|logp|700plogpp=0

R에는 log2OS에 따라 간단한 래퍼가 될 수 log/log(2)있거나 C99가 log2기능을 추가했다는 사실을 활용할 수있는 기능이 있습니다.
익명

답변:


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.