【发布时间】:2018-06-16 10:40:25
【问题描述】:
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()还能用在哪里?
【问题讨论】:
-
请注意,epsilon 是从 1 到下一个数字的距离,而不是从 0 到下一个数字的距离。在 IEEE 754 中,0 到 epsilon 之间有许多可表示的数字。
-
我在控制台打印了epsilon,输出为2.22045e-16。所以我这里关心的是它是否等于
prob_good_model < 0 -
和
< 0很不一样 -
@Finley,不,它不等同于
< 0; 0 和 epsilon 之间的所有数字的结果都不同。即使 epsilon 来自 0(这是min或denorm_min),对于 0 本身来说仍然是不同的结果。 -
@chris 那么
prob_good_model < std::numeric_limits<double>::epsilon()的真正含义是什么?你能给我一个合理的推测吗?
标签: c++ std numeric-limits