gpt4 book ai didi

c++ - Eigen `sum()` 函数在两个版本的程序中对同一 vector 给出不同的结果

转载 作者:行者123 更新时间:2023-11-30 03:35:06 28 4
gpt4 key购买 nike

我正在使用 Eigen c++ 库进行线性代数运算。

在我的代码中有一个变量v是一个VectorXd类型,我需要计算它的和,所以我调用了v.sum()

但是,当我将程序更新到新版本时,尽管 v 的值保持不变(从相同的输入文件读取),sum() 函数给一点不同的值(value)。

这是一段解释我的问题的代码:

double vsum1 = v.sum();
double vsum2 = 0; // compare with manually calculated sum
for(size_t i = 0; i < v.size(); ++i)
{
vsum2 += v(i);
}
cout << "sum1: " << vsum1 << endl;
cout << "sum2: " << vsum2 << endl;

对于旧版本,结果是

sum1: 94.8117866666666487
sum2: 94.8117866666666202

对于新版本,结果是

sum1: 94.8117866666666345
sum2: 94.8117866666666202

手动计算的和vsum2保持不变,所以我认为原点 vector v没有改变,那为什么sum()给出不同的结果?是不是因为一些由 Eigen 执行的 SIMD 优化?

差异实际上是可以忽略的,但这会导致回归测试失败。

最佳答案

5gon12eder 的评论是正确的。 Eigen3.3 执行 AVX vctorization(如果可用)(一次加倍 4),而仅在 Eigen3.2 中执行 SSE(一次加倍)。无论如何,在比较 float 时必须使用一定的公差来解决舍入误差。您可以从 Eigen 的单元测试中获得灵感。

关于c++ - Eigen `sum()` 函数在两个版本的程序中对同一 vector 给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41498911/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com