我想将源代码从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中不存在)。当然,这种差异对进一步的计算有影响。我该如何防止这种情况?
答案 0 :(得分:3)
看起来你在C ++代码中使用的精度较低。 C ++ float
通常对应于NumPy float32
;如果你想要精确等效于NumPy float64
,那通常是C ++ double
。