Reste el logaritmo máximo de todos los registros. Deseche todos los resultados que sean tan negativos que desbordarán lo exponencial. (Sus posibilidades son, a todos los efectos prácticos, cero).
De hecho, si desea una precisión relativa de (como para dígitos de precisión) y tiene probabilidades, deseche cualquier resultado menor que el logaritmo de . Luego proceda como de costumbre para exponer los valores resultantes y divida cada uno entre la suma de todos los exponenciales.ϵ = 10 - d d n ϵ / nϵϵ=10−ddnϵ/n
Para quienes gustan de las fórmulas, dejemos que los logaritmos sean con . Para logaritmos a la base b \ gt 1 , definaλ n = max ( λ i ) b > 1λ1,λ2,…,λnλn=max(λi)b>1
αi={bλi−λn,λi−λn≥log(ϵ)−log(n)0otherwise.
Las probabilidades normalizadas son iguales a , Esto funciona porque al reemplazar todos los otra manera se desbordan por cero, se produce un error total de como máximo mientras que, porque y todos no son negativos, el denominador , por lo que el error relativo total debido a la regla de reemplazo cero es estrictamente menor que , según se desee. i = 1 , 2 , ... , n . α i ( n - 1 ) ϵ / n < ϵ α n = b λ n - λ n = b 0 = 1 α i A = ∑ j α j ≥ 1 ( ( n - 1αi/∑nj=1αji=1,2,…,n.αi(n−1)ϵ/n<ϵαn=bλn−λn=b0=1αiA=∑jαj≥1((n−1)ϵ/n)/A<ϵ
Para evitar demasiados errores de redondeo, calcule la suma comenzando con los valores más pequeños de . Esto se hará automáticamente cuando los se primera vez en orden creciente. Esta es una consideración solo para muy grandes .λ i nαiλin
Por cierto, esta receta asumió que la base de los registros es mayor que . Para bases menores que , primero niegue todos los registros y proceda como si la base fuera igual a .b 1 1 / b1b11/b
Ejemplo
Deje que haya tres valores con logaritmos (registros naturales, por ejemplo) igual a y El último es el más grande; restarlo de cada valor da y- 231444.981 , - 231444.699. - 38202.733 , - 0.282 , 0.−269647.432, −231444.981,−231444.699.−38202.733, −0.282,0.
Supongamos que desea una precisión comparable a IEEE dobles (cerca de 16 dígitos decimales), por lo que y . (En realidad, no puede lograr esta precisión, porque se da solo a tres cifras significativas, pero está bien: solo estamos descartando valores que están garantizados para no afectar la mejor precisión que desea y la precisión que realmente tener.) Calcular = = La primera de las tres diferencias, es menor que esta, así que tírela, dejando solo y da n = 3 - 0.282 log ( ϵ / n ) log ( 10 - 16 ) - log ( 3 ) - 37.93997. - 38202.733 , - 0.282 0. exp ( - 0.282 ) = 0.754ϵ=10−16n=3- 0.282Iniciar sesión( ϵ / n )Iniciar sesión( 10- 16) - iniciar sesión( 3 )- 37.93997.- 38202.733 ,- 0.2820.exp( - 0.282 ) = 0.754 y (por supuesto). Los valores normalizados son, en orden, para el que tiró, y .exp( 0 ) = 10 00.754 / ( 1 + 0.754 ) = 0.4301 / ( 1 + 0.754 ) = 0.570
log1p