07/07/21 03:31:05
>>58
その方法は計算誤差というよりオーバーフローに弱い。
例えば log(A) = 800, log(B) = 799 の場合を計算してみれば分かる。
せっかく対数値があるんだから、できるだけ対数値のまま計算したほうがいい。
指数関数で元に戻す場合はオーバーフローしない手段を取らないといけない。
log(A) >= log(B)なら、
log(A + B) = log(A) + log(1 + exp(log(B) - log(A)))
で計算すれば、exp(log(B) - log(A))は最大でも1になる。
log(A) <= log(B)ならこの式のAとBの立場を換えればいい。