假设我有一些价值:
double x;
我希望将限制在某个范围[a, b]
,以使得结果值在该范围内:
double confine(double x, double a, double b)
{
if (x < a) return a;
else if (x > b) return b;
return x;
}
是否有单 boost
或STL函数可以为我执行此操作?
答案 0 :(得分:9)
是的,Boost算法有clamp
:
double clamped = clamp(x, a, b);
它只需要operator<
或自定义比较器,并保证只调用一次或两次。文档指出,对于double
和其他浮点类型,NaN可能会导致意外结果。
答案 1 :(得分:3)
除了clamp()
之外,您还可以使用std::max()
和std::min()
中的单行代码执行此操作。
double confine(double x, double a, double b) {
return std::max(a, std::min(x, b));
}