计算机都是二进制的脑袋,所以:
0.1 不能精确表示,在计算机内约0.099999999..
而:
0.5 == 2^( -1 );
0.25 == 2^( -2 );
如下代码检验:
//#define OPEN #include <cstdio> const double eps = 1e-10; int main() { #ifdef OPEN freopen ("in.txt","r",stdin); freopen ("out.txt","w",stdout); #endif // OPEN double i; const double con = 10.00; // for ( i=0 ; i != con ; i += 0.1);//无限循环 for( i = 0; i != con ; i += 0.25)//精确终止循环的条件 { printf("%.2lf\n",i); } return 0; }
以下循环:
两个循环条件
i <= d_con ;
与
i < d_con ;
程序输出的结果一致。
都包含 10.00.
0.1 不能精确表示,而 i 自增多次后,所得的数存在误差,。
//#define OPEN #include <cstdio> int main() { #ifdef OPEN freopen ("in.txt","r",stdin); freopen ("out.txt","w",stdout); #endif // OPEN double i; const double d_con = 10.00; //for( i = 0; i <= d_con ; i += 0.1) for( i = 0; i < d_con ; i += 0.1)// 两个循环条件 输出的结果都包含 10.00 { printf("%.2lf\n",i); } int x; const int i_con = 10; for( x =0 ; x< i_con ; x++) // 整数类比 { printf("%d ",x); } return 0; }