expを含む計算

先日、浮動小数点の精度で問題になっていたプログラムの解法を教えてもらい、プログラムの書き直しを行っています。問題になっていたのは、
P_g(g|J) = \frac{1}{n}\sum_{j=1}^{n} \frac{ \exp \{ -(g-g_i)^T \Sigma^{-1}(g-g_i)\}}{\sqrt{2^{k}\pi^{k}|\Sigma|}}
という式を評価するにあたって、 -(g-g_i)^T \Sigma^{-1}(g-g_i)の部分(Mahalanobis distance)の値が小さすぎて、expを計算すると0になってしまうという所。更に、やっかいのは上の数式には\Sigma、その後\prod、最後には\Sigmaがもう一度かかるという点です。そこで、expの中を正規化してやるのが解法です。
expのexponentの最大値を、M_J=max( -(g-g_i)^T \Sigma^{-1}(g-g_i))として、
P_g(g|J) = \frac{1}{n}\sum_{j=1}^{n} \frac{ \exp \{ -(g-g_i)^T \Sigma^{-1}(g-g_i)-M_J+M_J\}}{\sqrt{2^{k}\pi^{k}|\Sigma|}}
P_g(g|J) = \frac{exp(M_J)}{n}\sum_{j=1}^{n} \frac{ \exp \{ -(g-g_i)^T \Sigma^{-1}(g-g_i)-M_J\}}{\sqrt{2^{k}\pi^{k}|\Sigma|}}}
こうして、exp(M_J)の部分は、M_Jの部分だけ別に保持してやることで計算を続けることができます。ちょっと面倒ですが、最終的に計算結果は、あるイメージに対するキーワードのJoint Distributionとなっていて、ある画像にキーワードを付加する場合に、相対的に比較して確率の高いキーワードを付加してやるというようなアルゴリズムになっているため、計算の過程で出没する、このexp(M_J)のプロダクト値自体大方キャンセルでき、確率が0になることを防ぐことができるわけです。
という方法は、教科書の類には書かれていないのですが、どうやら2年前のComputer Visionのクラスで配布された資料には載っていたそうです。1人で教科書に向かっていてもなかなか解決できないことも、研究留学してればあっさり解決、助かります。