【发布时间】:2017-02-17 23:06:07
【问题描述】:
我尝试计算浮点数组的平方和。
如何减少舍入误差?
我试图在我的实际程序的内部循环中总结大约 5,000,000 个浮点数。
test.cpp:
#include <iostream>
#include <stdint.h>
template <typename Sum, typename Element>
Sum sum(const size_t st, const size_t en) {
Sum s = 0;
for (size_t i = st; i < en; ++ i) {
s += Element(i)*Element(i);
}
return s;
}
int main() {
size_t size = 100000;
std::cout << "double, float: "
<< sum<double, float>(0,size) << "\n";
std::cout << "int, int: "
<< sum<int, int>(0,size) << "\n";
}
输出:
double, float: 3.33328e+14
int, int: 216474736
【问题讨论】:
-
对它们进行排序,从最小的开始。
-
size_t size = 100000;现在对int来说有点过分了。 -
如果你的 int 是 32 位,那么整数计算就是换行
-
与
sum<long long, long long>(0,size)我得到333,328,333,350,000。所以肯定会溢出 int。
标签: c++ numerical-methods numerical