犰狳中的矩阵(向量)在从文件加载后获得新的小数位

时间:2016-03-17 22:54:56

标签: python c++ armadillo

我想将源代码从python转移到c ++(#include< armadillo>)。 我有一个向量(矩阵)保存到“my_vec.txt”,维度为1x200:

-0.082833
0.151422
-0.088526
...
...
0.115863
0.131043
0.041844

我想在python中计算两个my_vec的点积(这只是测试的一个例子)。

result = my_vec.dot(my_vec)
print (str.format("{0:.10f}", result))
结果

给了我 6.1402435303

当我尝试使用armadillo在c ++中执行相同的操作时:

float result;
result = dot(my_vec, my_vec);
std::cout << std::setprecision(10) << result;

我得到 6.140244007

所以我在加载文本文件中的值后,在armadillo中查看了我的float-vector my_vec 。这就是它的样子:

 -8.283299952745e-002
  1.514219939709e-001
 -8.852600306273e-002
 ...
 ...
 1.158630028367e-001
 1.310430020094e-001
 4.184399917722e-002

添加了很多小数位(my_vec.txt中不存在)。当然,这种差异对进一步的计算有影响。我该如何防止这种情况?

1 个答案:

答案 0 :(得分:3)

看起来你在C ++代码中使用的精度较低。 C ++ float通常对应于NumPy float32;如果你想要精确等效于NumPy float64,那通常是C ++ double