Up

2乗和の計算誤差

 

平均からの差の2乗和についての次式

の左辺と右辺の値が、コンピュータの計算では異なることがある。これは、桁落ちによるものであるが、例えば、次のプログラムで確認することができる。

d = []

for i in range(4):

    d.append(10.0 ** 10 - 3.0 + 2.0 * i)

print(d)

sum = 0.0

ssum = 0.0

for i in range(4):

    sum += d[i]

    ssum += d[i] ** 2

ssum1 = ssum - (sum ** 2) / 4

print("ssum1 = ", ssum1)

 

mean = sum / 4

ssum2 = 0.0

for i in range(4):

    ssum2 += (d[i] - mean) ** 2

print("ssum2 = ", ssum2)

 

ssum1が式(1)の右辺の値であり、ssum2が左辺の値である。プログラムを実行すると図1のようになる。

図1

 

ssum1が0であることは、次のことから理解される。

とおく。

次式

において、

である。また、有効桁数の関係から

となる。倍精度実数の有効桁数は約15桁である。

以上より、

となる。これが、

ssum1=0

の理由である。

他方、

であるので、

ssum2=20

を得る。

 

 

Up