Soustrayez le logarithme maximum de tous les journaux. Jetez tous les résultats si négatifs qu'ils déborderont l'exponentielle. (Leurs probabilités sont, à toutes fins pratiques, nulles.)
En effet, si vous voulez une précision relative de (comme ϵ = 10 - d pour d chiffres de précision) et que vous avez n vraisemblances, jetez tout résultat inférieur au logarithme de ϵ / n . Ensuite, procédez comme d'habitude pour exponentiariser les valeurs résultantes et divisez chacune par la somme de toutes les exponentielles.ϵϵ=10−ddnϵ/n
λ1,λ2,…,λnb > 1λn= max ( λje)b > 1
αje= { bλje- λn, λje- λn≥ log( ϵ ) - journal( n )0sinon .
Les probabilités normalisées sont égales à , Cela fonctionne parce que le remplacement de tous les autrement sous- par zéro fait une erreur totale d'au plus alors que, parce que et tous les sont non négatifs, le dénominateur , d'où l' erreur relative totale due à la règle de remplacement zéro est strictement inférieure à , comme vous le souhaitez. i = 1 , 2 , … , n . α i ( n - 1 ) ϵ / n < ϵ α n = b λ n - λ n = b 0 = 1 α i A = ∑ j α j ≥ 1 ( ( n - 1αje/ ∑nj = 1αji = 1 , 2 , … , n .αje( n - 1 ) ϵ / n < ϵαn= bλn- λn= b0= 1αjeA = ∑jαj≥ 1( ( n - 1 ) ϵ / n ) / A < ϵ
Pour éviter une trop grande erreur d'arrondi, calculez la somme en commençant par les plus petites valeurs de . Cela se fera automatiquement lorsque les sont d'abord triés dans l'ordre croissant. Ceci n'est pris en compte que pour les très grands .λ i nαjeλjen
BTW, cette prescription suppose que la base des journaux est supérieure à . Pour les bases inférieures à , annulez d'abord tous les journaux et procédez comme si la base était égale à .b 1 1 / b1b11/b
Exemple
Soit trois valeurs avec des logarithmes (journaux naturels, par exemple) égaux à et Le dernier est le plus grand; la soustraire de chaque valeur donne et- 231444,981 , - 231444,699. - 38202,733 , - 0,282 , 0.−269647.432, −231444.981,−231444.699.−38202.733, −0.282,0.
Supposons que vous souhaitiez une précision comparable aux doubles IEEE (environ 16 chiffres décimaux), de sorte que et . (Vous ne pouvez pas réellement atteindre cette précision, car n'est donné que pour trois chiffres significatifs, mais ce n'est pas grave: nous ne que des valeurs qui sont garanties de ne pas affecter le mieux la précision que vous voulez et la précision que vous avez réellement avoir.) Calculer = = La première des trois différences, est inférieure à cela, alors jetez-la, ne laissant que et Les donne 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.282log(ϵ/n)log(10−16)−log(3)−37.93997.−38202.733,−0.2820.exp(−0.282)=0.754 et (bien sûr). Les valeurs normalisées sont - dans l'ordre - pour celle que vous avez jetée, et .exp(0)=101 / ( 1 + 0,754 ) = 0,5700.754/(1+0.754)=0.4301/(1+0.754)=0.570
log1p