Printf N#39;在C ++中的浮点数给出零

时间:2014-05-15 12:19:17

标签: c++ printf

我现在正在做一些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 ++的专业人员所以我可以使用一些帮助来找出这些值是什么。

1 个答案:

答案 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