Up

負の分散になる場合

 

分散を求める式によっては、数値の精度のため、負の分散になることがある。すなわち、次式

において、左辺の2乗和を右辺の式によって求めると数値の精度のため右辺の値が負になることがある。例えば、次のプログラム

 

int main(array<System::String ^> ^args)

{

        double x[100];

        x[0] = 11122233344455;

        for (int i = 1; i <= 99; i++)

                x[i] = x[0] + i;

        for (int i = 0; i < 100; i++)

                Console::WriteLine("x[" + i + "] = " + x[i].ToString());

 

        double ssx = 0.0, sx = 0.0;

        for (int i = 0; i < 100; i++){

                sx += x[i];

                ssx += x[i] * x[i];

        }

        double v = ssx - sx * sx / 100.0;

        Console::WriteLine("SS = " + v.ToString());

 

    Console::WriteLine("Enterキーを押してください。");

        Console::ReadLine();

    return 0;

}

 

を実行すると、以下の結果になる。

==========================

x[0] = 11122233344455

x[1] = 11122233344456

x[2] = 11122233344457

x[3] = 11122233344458

x[4] = 11122233344459

x[5] = 11122233344460

x[97] = 11122233344552

x[98] = 11122233344553

x[99] = 11122233344554

SS = -2199023255552

Enterキーを押してください。

==========================

 

(1)式の右辺で求めた値が

SS = -2199023255552

と負の値になっている。

 

Up