모든 로그에서 최대 로그를 뺍니다. 음수 인 모든 결과를 버리면 지수가 넘치게됩니다. (그들의 가능성은 모든 실제적인 목적을 위해 0입니다.)
당신의 상대 정밀도를 원하는 경우 사실, (예 : ε = 10 - D 에 대한 D의 정밀도 자리)와 당신이 N 우도의 대수보다 적은 어떤 결과를 버리지 ε / N . 그런 다음 평소대로 진행하여 결과 값을 지수화하고 각 지수를 모든 지수의 합으로 나눕니다.ϵϵ=10−ddnϵ/n
공식을 좋아하는 사람들을 위해 로그 는 λ n = max ( λ i ) 인 으로하십시오 . 밑수 대한 로그의 경우 다음을 정의하십시오.λ1,λ2,…,λnλn=max(λi)b>1
α나는= { bλ나는− λ엔, λ나는− λ엔≥ 로그( ϵ ) − 로그( n )0그렇지 않으면 .
정규화 된 가능성은 , i = 1 , 2 , … , n과 같습니다 . 그렇지 않으면 언더 플로가되는 모든 α i 를 0으로 대체 하면 최대 n ( n - 1 ) ϵ / n < ϵ 의 총 오차가 발생 하지만 α n = b λ n - λ n = b 0 = 이기 때문에 작동합니다.α나는/ ∑엔j = 1αji = 1 , 2 , … , n 입니다.α나는( n - 1 ) ϵ / n < ϵ 이고 모든 α i 는 음수가 아니고 분모 A = ∑ j α j ≥ 1 이며,제로 교체 규칙으로 인한총상대오차가 ( ( n - 1 ) ϵ / n ) / A < ε 로서 원하는.α엔= bλ엔− λ엔= b0= 1α나는A = ∑jαj≥ 1((n−1)ϵ/n)/A<ϵ
반올림 오류를 너무 많이 피하려면 의 가장 작은 값으로 시작하는 합계를 계산하십시오 . 이것은 λ i 가 처음으로 오름차순으로 정렬 될 때 자동으로 수행됩니다 . 이것은 매우 큰 n에 대해서만 고려할 사항 입니다.αiλin
BTW,이 처방전은 로그의 기초가 보다 크다고 가정했습니다 . 염기 B 미만 1 염기가 동일 것처럼 그리고 제 부정 모든 로그 진행할 1 / B .1b11/b
예
− 231444.981 , − 231444.699 와 같은 로그 (자연 로그 등)를 갖는 세 개의 값이 있습니다 . 마지막이 가장 큽니다. 각각의 값에서 감산하는 범 - 38202.733 , - 0.282 , 및 0.−269647.432, −231444.981,−231444.699.−38202.733, −0.282,0.
당신은 IEEE의 두 배 (약 16 진수)에 비해 정밀도를 싶습니다 그래서 가정 와 N = 3 . (당신은 실제로 때문에,이 정밀도를 달성 할 수없는 - 0.282 우리는 당신이 원하는 정밀도와 정확도 실제로 당신의 더 나은 영향을 미치지 않도록 보장 값을 버리고있어 : 단지 세 개의 유효 숫자가 주어집니다,하지만 괜찮아요 계산 로그 ( ϵ / n ) = 로그 ( 10 − 16 ) − 로그 ( 3 ) = −ϵ=10−16n = 3− 0.282로그( ϵ / n )로그( 10− 16) − 로그( 3 ) 세 차이의 첫 번째는, - 38202.733는 , 그래서 그냥 떠나 멀리 던져 덜이보다 - 0.282 와 0 그들이 제공 제곱 승 애 썼는데 ( - 0.282 ) = 0.754 및 특급 ( 0 ) = 1 (물론). 버린값의 순서는 0 , 0.754 / ( 1 + 0.754 ) = 0.430 및 1 / ( 1 +− 37.93997.− 38202.733 ,− 0.2820.특급( − 0.282 ) = 0.754특급( 0 ) = 100.754 / ( 1 + 0.754 ) = 0.430 이다.1 / ( 1 + 0.754 ) = 0.570
log1p