MATLABの計算精度
いま,
A=[0.803, -0.803, 1.2124, 0.803, -0.803, -0.803, 1.2124, 0.803];
とします.
このとき,次の2通りの演算をします.
(i)
a=0;
for I=1:8
if( A(I)>=0 )
a=a+A(I)*0.25;
else
a=a+A(I)*0.75;
end
end
(ii)
Bi=[0.25, 0.75, 0.25, 0.25, 0.75, 0.75, 0.25, 0.25];
b=sum(Bi.*A);
(i)と(ii)によって得られる和の値をMATLABのコマンド上で表示すると,
同じ値として表示されるのですが,a-b と計算すると,0 ではなく,
8.04e-15のようになります.(現環境ではMATLABが使えないので,確認できませんが,もっと大きいデータでやったとき場合には,上記のように誤差が生じました).
困っているのは,現在組んでいるプログラムでは計算した値の正負によって
異なった計算をする必要があり,計算精度が非常に重要になってきます.
そのため計算結果が例えば +1.4e-15となるか -6.4e-16 となるかによってその後の計算結果が大きく変わってしまいます.
MATLABでは,上記(i)(ii)のような誤差が生じるためか,+1.4e-15となってほしいところが,なぜか -6.4e-16となってしまいうまくプログラムが動きません.
MATLABでは,for文によって和をとるのではなく,一回でまとめて計算しなければ誤差が生じるのでしょうか?
また,MATLABで計算精度を変更できないのでしょうか?
(formatコマンドによって,「format short g」「format double g」としましたが有効な小数点が増減するだけで結果は同じでした.)
よりよい精度で計算するにはどうしたらよいのでしょうか?
回答よろしくお願いします.
お礼
ありがとうございました。 レポート課題で単精度と倍精度の場合の誤差の違いを比較せよというものがあったのです。