程序 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]