我无法理解Tesseract的control.cpp中的以下代码:
(stats_.doc_outline_errs / static_cast<float>(page_res->char_count) <=
quality_outline_pc)
stats_.doc_outline_errs
是short
,page_res->char_count
是int
但quality_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)
答案 0 :(得分:4)
我们似乎正在比较一个short除以一个带有变量声明浮动的int,即
tesseract::DoubleParam quality_outline_pc
?
我不知道你的意思是“与变量声明比较”。您将计算的值与变量的值进行比较。 DoubleParam
类型可使用其转化运算符double
转换为operator double()
。除法的结果将从float
转换为double
以匹配,并将比较这两个值。
它是否具有某些C ++特性?
我也不知道你的意思。所有这些操作(类型转换,除法和比较)都是C ++语言的一部分。
我正在研究这个问题的原因是我从Valgrind那里得到了一个错误
这意味着其中一个变量尚未初始化。