0
该代码正在计算定义为 Tn + 2 =(Tn + 1)^ 2 + Tn的系列的第N项,其中第1项和第2项在代码中作为a和b给出。为什么double和long double在以下程序中给出了不同的答案
#include<iostream>
#include<string>
using namespace std;
int main()
{
int a,b,n;
char ch[100];
cin>>a>>b>>n;
long double res[3];
res[0]=a,res[1]=b;
for(int i=n-2;i>0;i--)
{
res[2]=res[1]*res[1]+res[0];
res[0]=res[1];
res[1]=res[2];
}
sprintf(ch,"%.0Lf",res[2]);
cout<<ch;
return 0;
}
输入:0 1 10
输出:
84266613096281242861568 // in case of double res[3];
84266613096281243385856 // in case of long double res[3];
correct output : 84266613096281243382112
既然是外出整数的范围的,因此,我使用的双/长一倍。
但问题是我得到不同的输出为双和长双,而没有一个中间值是非小数点后的零位,所以不应该有任何舍入,我猜。
你应该看看“浮点”是什么意思。 – melpomene
您似乎对这两种数据类型都存在根本的误解。你是否认为他们都有无限的积分数位,并且只有他们可以表示的“小数位数”的不同?你正在使用哪本书? –
http://floating-point-gui.de/ –