(1) double型では誤差が発生する事について
(1-1) double型は近似値を使用している
(1-2) double型の誤差の例
(1) double型で誤差が発生する件について
(1-1) double型は近似値を使用している
具体的には「1/(2のn乗)」(及びその倍数)以外では近似値が使われます。この理由は10進数の数字をコンピュータが扱う2進数に変換する過程で「1/(2のn乗)」で割り切れない場合は、どこかで切り捨て処理が発生するためです。
(図111)

(1-2) double型の誤差の例
(1-2-1) 誤差の例①:割り算
(図121)

(サンプルPG)
public class IT0126_Double_Error {
public static void main (String args[]) {
d_err();
}
public static void d_err() {
//1~1000までの中で、dで割ってdを掛けても元に戻らない数字を探す
for(int i=1; i<1000; i++) {
//double型で計算をするためにiをキャストしてdouble型に変換
double d = (double)i;
//もし10.0をdで割ってから、再度dを掛けて10.0に戻らない場合
if((10.0/d*d)!=10.0) {
System.out.println("i="+i+" : "+10.0/d*d);
}
}
}
}
(1-2-2) 誤差の例②:掛け算と引き算
この例では「1.0-7.0*0.1」の結果が0.3にならず「0.29999999999999993」となります。
(サンプルPG)
public class IT0126_Double_Error2 {
public static void main (String args[]) {
System.out.println(1.0-7.0*0.1);
}
}
(図122)
