我现在正在做一些c ++,偶然发现了一个我无法解决的问题。
我正在做这样的浮点比较:
if(dists.at<float>(i,0) <= 0.80 * dists.at<float>(i,1)) {
matched = true;
matches++;
} else {
printf((dists.at<float>(i,0) <= 0.80 * dists.at<float>(i,1)) ? "true\n" : "false");
printf("threw one away because of dist: %f/%f\n", dists.at<float>(i,0),dists.at<float>(i,1));
}
在第一行,比较投出了一个假的意思:dists [0]&gt; dists中[1] 当我们打印值时,结果如下:
falsethrew one away because of dist: 0.000000/0.000000
falsethrew one away because of dist: 0.000000/0.000000
我认为它与结果不是浮动或其他东西有关,但我不是C ++的专业人员所以我可以使用一些帮助来找出这些值是什么。
答案 0 :(得分:0)
看起来这是因为数字太小了。
在回复@NirMH时,我将发表评论作为答案。
%g
代替%f
可以打印非常小的浮点数。
还有其他选项,例如%e
,如评论中提到的@ ilent2。
例如:
double num = 1.0e-23;
printf("%e, %f, %g", num, num, num);
打印出以下结果:
1.000000e-023, 0.000000, 1e-023