(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)