浮動少数と丸め誤差

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

floatやdouble型をloopカウンタや終了条件にすると意図したループ回数にはならない時もあるので注意。

丸め誤差

限られたビット数で浮動小数点数を表現した時、実際の値と近似した値で誤差が出る。

float f1, f2;
f1 = 0.1f;
f2 = 0.100000001f;
printf( " %20.18f \n %20.18f", f1, f2 );
/*
0.100000001490116119 
0.100000001490116119
*/
桁落ち

丸め誤差の一種。数値を足し引きした場合、丸め誤差より誤差が大きい。特に性質上引き算時が顕著。

float f1, f2;
f1 = 1.0000101f;
f2 = 1.0000100f;
printf( " %15.13f \n", f1 - f2 );
printf( " %15.13f \n", f1 + f2 );
/*
0.0000001192093 
2.0000200271606 
*/