c++ Timer

发信人: zxiaoqiang (xiaoqiang), 信区: C_Cpp 

标  题: c++中的bug 

发信站: 兵马俑BBS (Sun Sep  6 22:55:54 2009), 本站(bbs.xjtu.edu.cn) 

 

自己在使用c++过程中,遇见了一个自己一直想不明白的问题。在此请教一下各位大侠。我使用定时器每隔1秒让我的自变量加0.2,当自变量值大于等于6时停止定时器。当我把这个自变量的类型定义为float时,当定时器停下时,自变量的值已经变成了6.2,并不是6。但是当这个自变量的类型定义为double时,自变量的值最后就会定格在6。不知道这个数据类型怎么会影响这样一个过程。希望高手可以指点迷津。谢谢 

 

 

发信人: phylips (星星||一年磨十剑), 信区: C_Cpp 

标  题: Re: c++中的bug 

发信站: 兵马俑BBS (Mon Sep  7 09:38:13 2009), 本站(bbs.xjtu.edu.cn) 

 

这个不算c++的bug,问题在于浮点数的表示,具体参考ieee754标准 

大体上来说是这样,0.2这个数很明显无法用有限二进制位表示 

这样会存在一个误差,而且伴随着不断的加,误差会累积,而float double精度不同,这样就可能发生一些不同。问题不是出在6.2时,而是6.0。当你认为加到6理应是6.0的时候,根据结果,说明float看来是6.0少一点,比如是5.999999...之类的,所以还会继续加个0.2 

 

浮点数大小比较有个基本原则,不能直接比较,估计你是在直接比较6.0,而通常是要用误差限定,定义一个允许误差ESP。 

 

综上,bug是你出的,不是c++的;一般来说,bug通常都是你的。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值