这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [分享]C++小BUG大围剿(六)

共1条 1/1 1 跳转至

[分享]C++小BUG大围剿(六)

菜鸟
2006-11-30 05:16:15     打赏

程序 6 幼儿园算术修订版

大家都知道,1+1=2,1+1+1=3,也知道1/3+1/3+1/3等于1或者3/3,下面的程序演示了这种简单的算术,但是由于某种原因,它不能正常工作,原因是什么?

1 /********************************************************

2 *test out basic arithmetic that we learned in first grade*

3 ********************************************************/

4 #include<isostream>

5

6 int main()

7 {

8 float third=1.0/3.0; //the value 1/3

9 float one=1.0; //the value 1

10

11 if((third=third=third)==one)

12 {

13 std::cout<<

14 “equal 1=1/3+1/3+1/3\n”;

15 }

16 else

17 {

18 std::cout<<

19 “not equal 1 !=1/3+1/3+1/3\n”;

20 }

21 return(0)

22 }

答案:把1/3写成十进制小数值,在一列中以十进制格式3次输出1/3,再把它们加在一起,,问题就在于不能用浮点数形式准确地表示1/3,我们来看看把1/3的小数形式累加在一起会是什么结果

1/3=0.333333

1/3=0.333333

1/3=0.333333

-------------------

0.99999

由于取整错误,结果不是1,注意:使用浮点数的时候,它们对数值的描述是不精确的

[em24][em25]



关键词: 分享     围剿    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]