【发布时间】:2012-08-29 16:09:51
【问题描述】:
我计算了该系列的前 20 个元素 -
有 2 种方式,第 1 次前进,第 2 次后退。为此我做到了-
#include <iostream>
#include <math.h>
using namespace std;
float sumSeriesForward(int elementCount) {
float sum = 0;
for (int i = 0; i < elementCount; ++i) {
sum += (float) 1 / (pow(3, i));
}
return sum;
}
float sumSeriesBack(int elementCount) {
float sum = 0;
for (int i = (elementCount - 1); i >= 0; --i) {
sum += (float) 1 / (pow(3, i));
}
return sum;
}
int main() {
cout.precision(30);
cout << "sum 20 first elements - forward: " << sumSeriesForward(20) << endl;
cout << "sum 20 first elements - back: " << sumSeriesBack(20) << endl;
}
我得到了 -
sum 20 first elements - forward: 1.5000001192092896
sum 20 first elements - back: 1.5
有人能解释一下为什么这两种方式有区别吗?
【问题讨论】:
-
使用浮点数对一系列数字求和时,总是先对较小的数求和——基本浮点数 101——40 年前就学会了。
-
@HotLicks :你的意思是它提供了更好的准确性?
-
@URL87 -- 是的。当您添加一个大数字和一个小数字时,您会从小数字中失去意义。先做小数字会使它们变成更大的数字,从而减少重要性的损失。
标签: c++ floating-point series