无法理解浮点数和对象实例化之间的比较原因

时间:2015-04-15 12:55:26

标签: c++ valgrind tesseract

我无法理解Tesseract的control.cpp中的以下代码:

(stats_.doc_outline_errs / static_cast<float>(page_res->char_count) <=
     quality_outline_pc)

stats_.doc_outline_errsshortpage_res->char_countintquality_outline_pc是:

double_VAR_H(quality_outline_pc, 1.0,
               "good_quality_doc lte outline error limit");

double_VAR_H是:

#define double_VAR_H(name,val,comment)\
  tesseract::DoubleParam     name

我们似乎正在将short除以int投放到float的{​​{1}}与变量声明进行比较,即tesseract::DoubleParam quality_outline_pc

它是否具有某些C ++特性?

我之所以这样做是因为我在这一行得到了Valgrind的错误:

==29454== Conditional jump or move depends on uninitialised value(s)
==29454==    at 0x5AB9E76: tesseract::Tesseract::rejection_passes(PAGE_RES*, ETEXT_DESC*, TBOX const*, char const*) (control.cpp:665)

1 个答案:

答案 0 :(得分:4)

  

我们似乎正在比较一个short除以一个带有变量声明浮动的int,即tesseract::DoubleParam quality_outline_pc

我不知道你的意思是“与变量声明比较”。您将计算的值与变量的值进行比较。 DoubleParam类型可使用其转化运算符double转换为operator double()。除法的结果将从float转换为double以匹配,并将比较这两个值。

  

它是否具有某些C ++特性?

我也不知道你的意思。所有这些操作(类型转换,除法和比较)都是C ++语言的一部分。

  

我正在研究这个问题的原因是我从Valgrind那里得到了一个错误

这意味着其中一个变量尚未初始化。