我想将源代码从python转移到c++(#include )。
我有一个尺寸为1x200的 vector (矩阵)保存到“my_vec.txt”:
-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 中查看了我的浮点 vector my_vec。它是这样的:
-8.283299952745e-002
1.514219939709e-001
-8.852600306273e-002
...
...
1.158630028367e-001
1.310430020094e-001
4.184399917722e-002
添加了很多小数位(my_vec.txt中不存在)。当然,这种差异会影响进一步的计算。我该如何预防?
最佳答案
看来您在C++代码中使用的精度较低。 C++ float
通常对应于NumPy float32
;如果您想要与NumPy float64
等效的精度,通常是C++ double
。
关于python - 从文件中加载后, Armadillo 中的矩阵( vector )将获得新的小数位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36073143/