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 */