質問: pythonで複素数の積算をすると a=2+1j abs(a)**2=5.000000000000001 のようになり、完全な5にならないのですが、なぜでしょうか。 おそらく誤差に起因すると思うのですが、具体的どこの誤差に起因しているのでしょうか。 また、これを解決するにはどういう計算の書き方をすれば良いでしょうか。 2点お願いします。
回答: `abs(a)`は数学的には√5ですがこれは有限桁の小数で表せません。 プログラム的には有限桁の小数で持とうとするのでこの時点で誤差があります。 絶対値は実部の2乗と虚部の2乗を足して1/2乗したものですので 絶対値の2乗は実部の2乗と虚部の2乗を足したものです。