浮点数陷阱

 

      计算机都是二进制的脑袋,所以:

           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;
}


 



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值