gpt4 book ai didi

c++ - 使用 Eigen3 的 C++ 的最大精度

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:30 25 4
gpt4 key购买 nike

我正在使用很棒的 Eigen3 库编写 MATLAB MEX 文件。但我遇到了一些准确性问题(与 MATLAB 相比),即使在使用 long double 时也是如此.最关键的计算似乎是我根据正态分布计算概率的计算。这是代码片段:

p.fill( 1/( M_PIl * sigma * sigma ) );
p.array() *= ( - 0.5/pow( sigma, 2.0 ) * ( mu.array() - x.array() ).array().square() ).array().exp();

哪里x , pmuEigen::Matrix< long double, Dynamic, 1 > .通常这些 vector 的长度为 3000 .

我可以采取哪些可能的步骤来获得尽可能高的精度?我可以使用哪些正确的 GCC 编译器标志来尽可能强制使用 80 位精度?

P.S:我使用 gcc 4.9 编译 C++ 代码(在带有 MEX 的 MATLAB 中),我的 linux 报告以下可用指令集:Intel MMX、Intel SSE、Intel SSE2、Intel SSE3、Intel SSE4

编辑:我尝试了@Avi Ginsburg 下面的建议,并使用以下命令对其进行了编译:

mex -g -largeArrayDims '-I/usr/include/eigen3' CXXFLAGS='-DEIGEN_DONT_VECTORIZE -std=c++11 -fPIC' test.cpp

doublelong double对于 MATLAB 的解决方案,这些选项中的每一个都给我相同的错误。

最佳答案

我在这里冒险猜测。您在数组计算中使用 SSE 指令,最值得注意的是 ...array().exp()。我很确定 SSE 没有扩展精度,因此 MATLAB 和 Eigen 之间存在差异。

关于c++ - 使用 Eigen3 的 C++ 的最大精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39445865/

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