用两种不同的顺序计算n的负2次方,顺序不同得到的答案也不同,但实际计算中两种顺序得到的答案相同?

秋明海
  • 6

在数值计算方法的书中有一道题目让计算求和n的负2次方 n的范围是1-10000 约等于1.644834 1.644725
但我在实际计算中分别让n从1到10000和n从10000到1,答案都是1.644834,并没有出现误差,这是怎么回事?
是代码的问题吗?

clipboard.png

clipboard.png

回复
阅读 2.3k
1 个回答
fengcl
  • 154

1.644834 1.644725 是用float计算来出来。精度低。

你的代码是用double算出来的,精度高。

用double计算,两次计算的数据,也会不一样。
但你的代码显示一样,是因为你是按float的格式输出double的数据。
如果你输出double所有的小数,结果就会不一样。
就是这样的数据。
1.64483407184805963
1.64483407184806518
最后向几位不一样。

如果用float,就是这样的数据
1.64483404159545898
1.64472532272338867

附c++,double计算的代码

#include <iostream>
int main()
{
double s=0;
for(int i=10000;i>0;i--)
{
double t = 1.0/(i*i);
s +=t;

}
std::cout.precision(17);
std::cout<<std::fixed<<s<<std::endl;

s = 0;
for(int i=1;i<=10000;i++)
{
double t = 1.0/(i*i);
s +=t;
}
std::cout.precision(17);
std::cout<<std::fixed<<s<<std::endl;
}

单精度浮点数在机内占4个字节,用32位二进制描述。
双精度浮点数在机内占8个字节,用64位二进制描述。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏