这是代码
#include <iostream>
#include <cmath>
using namespace std;
void main(){
long int i=0;
double sum=0,term,pi;
do{
i+=1;
term=1.0/(i*i);
sum+=term;}
while (term>1e-12);
pi=sqrt(sum*6);
cout<<"pi="<<pi<<endl;
}
运行之后 pi=3.14159
但是如果把第五行改为long double i=0 的话就运行结果为3.14159
我想知道他们有什么不同吗??? 还有就是double型除以整型会得到什么结果
非常感谢
不好意思 第一次运行结果为3.14157
修改为long double 后结果为3.14159
不好意思 是我问题打错了 如果用long int 的话运行结果是3.14157这个是错的
只要把int改为double的话就是3.14159了 这个是正确结果 我就不知道咋回事了 纠结啊
我特意编译了这段代码,确实有这个问题。
把term=1.0/(i*i);改成term=1.0/(double(i)*i);就好了。问题可能出在long int的数据溢出上。
在我的机器上long int与int同样占四个字节,两个long int相乘,产生的临时数据也是个long int类型,数据大一点的话会导致数据溢出,从而产生上述结果。
改成term=1.0/(double(i)*i)以后,分母是一个double与int相乘,运算结果是一个double类型,所以不存在数据溢出问题。
你好 谢谢你的回答 我刚刚打错了
就是我想知道那两种运行结果不同的原因