有没有一种自然的方法来定义一个介于0和1之间的数字类型?基本上,我们可以用double来做任何事情,问题是我应该在一些函数中定义一些边界检查,并且我有一个(可能很愚蠢的)想法,将边界检查外包给一个类,比如
class Probability {
// the value of the Probability
double val;
Probability(double val):value(val){
// freak out if val > 1 or val < 0
//...
//
};
// operators such as
Probability operator + (Probability const & a, Probability const & b){
double result a.val + b.val;
if ((result > 1) || (result < 0)){
// freak out
result = 0
}
return result;
}
// ...
//
}这种方法的问题可能是它会减慢每个操作的速度。有没有更快的边界检查方法?我还想知道如何处理上面代码中的“离谱”部分。
发布于 2015-11-20 18:12:39
“变态”选项很简单:throw std::invalid_argument。抛出有一点慢并不重要;你无论如何都得不到答案。优点是不抛出很快,因为优化器可以假设非异常路径的可能性要大得多。
在性能方面,最好是有一个IntermediateResult类,这样只对返回给Probability的最终赋值进行范围检查。这就绕过了0.75+0.5-0.6示例。
https://stackoverflow.com/questions/33823356
复制相似问题