すべてのログから最大対数を引きます。指数関数をアンダーフローするような非常に否定的な結果はすべて捨ててください。(それらの可能性は、すべての実用的な目的のために、ゼロです。)
確かに、あなたがの相対精度たい場合は、ϵ(例えばϵ = 10− dのためのd精度の桁)、あなたが持っているnの尤度を、以下の対数よりも任意の結果を捨てるϵ / n。その後、通常どおりに結果の値をべき乗し、すべてをすべての指数の合計で除算します。
λ1、λ2、… 、λnB > 1λn= 最大(λ私)b > 1
α私= { bλ私- λn、λ私- λn≥ ログ(ϵ )− ログ(n )0それ以外の場合。
正規化された尤度は、、 これは、アンダーフローしているすべてゼロに置き換えると、合計エラーが最大になるためです。一方、およびすべてのは負ではなく、分母であり、ゼロ置換ルールによる合計相対誤差は厳密に、必要に応じて。 iは= 1 、2 、... 、N 。α I(N - 1 )ε / N < ε α N = B λ N - λ N = B 0 = 1 α 、I A = Σ jのα J ≥ 1 ((N - 1α私/ ∑nj = 1αj私は= 1 、2 、... 、N 。α私(n − 1 )ϵ / n < ϵαn= bλn- λn= b0= 1α私A = ∑jαj≥ 1((n − 1 )ϵ / n )/ A < ϵ
過度の丸め誤差を回避するには、最小値から合計を計算します。これは、が最初に昇順でソートされるときに自動的に行われます。これは、が非常に大きいのみ考慮されます。λ I Nα私λ私n
ところで、この処方は、ログのベースがより大きいと仮定しました。ベースが未満の場合、最初にすべてのログを無効にし、ベースが等しいかのように続行します。b 1 1 / b1b11 / b
例
対数(自然対数、たとえば)がおよび等しい3つの値があるとし 最後が最大です。各値からそれを引くと、および− 231444.981 、− 231444.699。- 38202.733 、- 0.282 、0。− 269647.432 、 − 231444.981 、− 231444.699。− 38202.733 、 − 0.282 、0。
IEEEの倍精度(10進数で約16桁)に匹敵する精度が必要で、およびます。(は3つの有効数字にしか与えられないため、実際にこの精度を達成することはできませんが、それでも大丈夫です:必要な精度と実際の精度に影響を与えないことが保証されている値のみをていますhave。) = = 3つの違いのうち、最初のはこれよりも小さいため、捨てて、とだけを残し ます。 n = 3 − 0.282 log (ϵ / n )log (10 − 16)− log (3 )− 37.93997 − 38202.733 、− 0.282 0. exp (− 0.282 )= 0.754 exp (0 )= 1 0 0.754 /(1 + 0.754 )=ϵ = 10− 16n = 3− 0.282ログ(ϵ / n )ログ(10− 16)− ログ(3 )− 37.93997。− 38202.733 、− 0.2820。exp(− 0.282)= 0.754および(もちろん)。正規化された値である- order--にあなたは捨てたいずれかの、、及び。exp(0 ) = 101 /(1 + 0.754 )= 0.5700.754 /(1 + 0.754 )= 0.4301 /(1 + 0.754 )= 0.570
log1p
関数を使用したときに、その関数を言語で使用しましたか?これは、1。の周りのテイラー展開を使用しています