为什么输出的答案不同??

来源:百度知道 编辑:UC知道 时间:2024/06/28 23:57:50
//求分数序列:2/1,3/2,5/3,8/5,13/8,21/13……的前50项制之和的程序
#include<iostream.h>
void main()
{
int temp;
float sum=0.0,z=2.0,m=1.0;
int k=0;
while(k<50){
sum=sum+z/m;
temp=m;
m=z;
z=z+temp;
k=k+1;
}
cout<<"The sum of the 50 number is :"<<sum<<endl;
}
这样的话输出是78.3042

//求分数序列:2/1,3/2,5/3,8/5,13/8,21/13……的前50项制之和的程序
#include<iostream.h>
void main()
{
int temp,z=2,m=1;
float sum=0.0;
int k=0;
while(k<50){
sum=sum+(float)z/m;
temp=m;
m=z;
z=z+temp;
k=k+1;
}
cout<<"The sum of the 50 number is :"<<sum<<endl;
}
这样的话输出是74.1559

我觉得两个程序做同件事情都可以啊,为什么答案会不同??
搜索更多相关主题的帖子: sum int temp float 输出

先定义z,m为float再除得出的值 和 定义z,m为int除后在强制为float得的值应该是同一回事的啊?

两种都可以,但第2种更精确。相差于:
(1)int temp;
float sum=0.0,z=2.0,m=1.0;

(2)int temp,z=2,m=1;
float sum=0.0;
int k=0;
在(1)中,程序所求的值是每一个数都取近似值相加的和
但(2)中,程序所求值则是所有数相加的和再取近似值
所以(2)比一要精确得多