unsigned int updateStandardStopping(unsigned int numInliers, unsigned int totPoints, unsigned int sampleSize)
{
double max_hypotheses_=85000;
double n_inliers = 1.0;
double n_pts = 1.0;
double conf_threshold_=0.95
for (unsigned int i = 0; i < sampleSize; ++i)
{
n_inliers *= numInliers - i;//n_linliers=I(I-1)...(I-m+1)
n_pts *= totPoints - i;//totPoints=N(N-1)(N-2)...(N-m+1)
}
double prob_good_model = n_inliers/n_pts;
if ( prob_good_model < std::numeric_limits<double>::epsilon() )
{
return max_hypotheses_;
}
else if ( 1 - prob_good_model < std::numeric_limits<double>::epsilon() )
{
return 1;
}
else
{
double nusample_s = log(1-conf_threshold_)/log(1-prob_good_model);
return (unsigned int) ceil(nusample_s);
}
}
以下是一个选择语句:
if ( prob_good_model < std::numeric_limits<double>::epsilon() )
{...}
据我理解,判断语句与(或接近于)以下内容相同:
prob_good_model < 0
那么,无论我是否正确,以及除此之外在哪些情况下可以使用 std::numeric_limits<double>::epsilon()
?
prob_good_model < 0
。 - Finley< 0
相比,它非常不同。 - M.M< 0
;在0和epsilon之间的所有数字在其结果上都有所不同。即使epsilon是从0开始的(这是min
或denorm_min
),对于0本身仍然会产生不同的结果。 - chrisepsilon
作为一个小数使用。虽然它与其定义无关,在某些问题中可能不够小,但有时人们将其用作足够小的度量。因此,条件prob_good_model < epsilon
意味着prob_good_model
足够接近于零。这里的足够是根据编写代码的人的判断而定。请注意,当概率足够接近于零时,通常情况下nusample_s
公式会返回一个非常大的数字,然后他们会返回(他们认为是大数)max_hypotheses_
。 - conditionalMethod