二次元座標上の2点間の距離を求めたいとき、複素数の絶対値を求めたいとき、その他いろいろなときに x = √(a2 + b2) という式を使います(これをpythagorean additionと言うそうです)。これを実装するとき、 という文がよく使われますが、この文を無闇に使っていると、あまり嬉しくない事態を引き起こすことになります。 さて、この文ののどこがいけないのでしょうか。 賢明な皆さまはもうお気づきでしょうが、a*a + b*bはオーバーフローを引き起こすおそれがあるのです。変数の値域を保証できるのならともかく、そうでなければ次に挙げる3つの対策のいずれかを採るべきです。 1.式変形 a’ = max( |a|, |b| ), b’ = min( |a|, |b| ) とおくと、 √(a2 + b2) = a’√(1 + (b’/a’)2) と変形できます。この式を使うとオ