Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab与c++;精确 我用Matlab到C++编写了一个脚本,使用 ARMADILO 库,用于线性代数和矩阵。_C++_Matlab_Double Precision - Fatal编程技术网

matlab与c++;精确 我用Matlab到C++编写了一个脚本,使用 ARMADILO 库,用于线性代数和矩阵。

matlab与c++;精确 我用Matlab到C++编写了一个脚本,使用 ARMADILO 库,用于线性代数和矩阵。,c++,matlab,double-precision,C++,Matlab,Double Precision,为了获得大致相同的输出,我调用了cout方法: cout.precision(4); cout.setf(ios::fixed); 但我得到了不同的结果: Matlab结果: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0012 0.0014 0.0016 0.0020 0.0281 0.0396 0.0297 0.0297 0.0495 0.0976 接近代码> 0.041代

为了获得大致相同的输出,我调用了cout方法:

cout.precision(4);
cout.setf(ios::fixed);
但我得到了不同的结果:

Matlab结果:

0.0000    0.0000    0.0000    0.0000    0.0000   
0.0012    0.0014    0.0016    0.0020    0.0281  
0.0396    0.0297    0.0297    0.0495    0.0976  
<犰狳C++结果:

0.0000    0.0000    0.0000    0.0000    0.0000 
0.0012    0.0014    0.0016    0.0020    0.0282 
0.0416    0.0312    0.0312    0.0520    0.1027
现在,我不知道是否有微小的不精确性(<代码> 0.039 < /代码>接近代码> 0.041代码>)是由我的C++代码中的一些错误引起的,或者它们应该被认为是G++和Matlab

中的双精度之间的正常差异。 在我的代码中,我使用了很多这样的循环:

xi_summed = xi_summed + normalise((trans % (alpha.col(t) * b.t())));

其中,
xi_summated
trans
alpha
b
arma::mat
%
是元素乘法,
mat::t()
是转置,而normalise是一个函数,它使矩阵
a
数组的条目总和为
1
通常精度更好,您可以通过键入
eps
来了解matlab的精度。对我来说是
2.2204e-16

然而,这也很大程度上取决于你所做的微积分

例如,如果你计算两个非常大的数字的差值,而差值非常小,那么你的精度将非常差

实际上,
eps
是一个相对精度。 因此,如果您键入
eps(n)
,您将获得给定值的精度


例如,
eps(10^16)
2
。因此,对于大小为
10^16
的运算,精度将为
2

这肯定不是正常的差异

机器ε将比您得到的误差小几个数量级(即2.22e-016与2.0e-3)

<>你可以用下面的C++代码确认你的机器ε:

#include <limits>

cout << "Machine Epsilon is: " << numeric_limits<double>::epsilon() << endl;

如果你在Matlab和C++中的计算在数学上是等价的,那么你应该得到相同的结果——特别是4的精度。P>当然不是看起来像正常的差异。我想重写HMM工具包的一些功能,并且有超过500行的C++代码。我不知道是哪一行,因为我不知道错误应该在哪里如果你的问题是病态的,那么算法中的细微差异可能会导致非常不同的结果。操作顺序可以。我如何检查C++中的精度设置,在C++中。双变量是64位的,因此精度应该在
2^-64=5e-20
左右。同样的浮点应该有大约<代码> 2 ^ 32=2E-10精度,所以如果我想要Matlab具有相同的C++精度,我必须写EPS(5E-20)。但是我的不同结果呢?因为你是由不同的精度造成的,或者错误在其他地方?这可能是因为一个错误。。。通常情况下,机器的精度不会造成太大的差异。
eps