在数值计算方法的书中有一道题目让计算求和n的负2次方 n的范围是1-10000 约等于1.644834 1.644725 但我在实际计算中分别让n从1到10000和n从10000到1,答案都是1.644834,并没有出现误差,这是怎么回事?是代码的问题吗?
1.644834 1.644725 是用float计算来出来。精度低。 你的代码是用double算出来的,精度高。 用double计算,两次计算的数据,也会不一样。但你的代码显示一样,是因为你是按float的格式输出double的数据。如果你输出double所有的小数,结果就会不一样。就是这样的数据。1.644834071848059631.64483407184806518最后向几位不一样。 如果用float,就是这样的数据1.644834041595458981.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位二进制描述。
1.644834 1.644725 是用float计算来出来。精度低。
你的代码是用double算出来的,精度高。
用double计算,两次计算的数据,也会不一样。
但你的代码显示一样,是因为你是按float的格式输出double的数据。
如果你输出double所有的小数,结果就会不一样。
就是这样的数据。
1.64483407184805963
1.64483407184806518
最后向几位不一样。
如果用float,就是这样的数据
1.64483404159545898
1.64472532272338867
附c++,double计算的代码