如何确保数字在范围内?
How do I ensure a number is within a range?
假设我有一些价值:
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;
}
是否有 single boost
或 STL 函数可以为我做这件事?
是的,Boost算法有clamp
:
double clamped = clamp(x, a, b);
它只需要operator<
或自定义比较器,并保证它只被调用一次或两次。文档指出,对于 double
和其他浮点类型,NaN 可能会导致意外结果。
除了clamp()
,您还可以在std::max()
和std::min()
.
中使用一个衬垫来做到这一点
double confine(double x, double a, double b) {
return std::max(a, std::min(x, b));
}
假设我有一些价值:
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;
}
是否有 single boost
或 STL 函数可以为我做这件事?
是的,Boost算法有clamp
:
double clamped = clamp(x, a, b);
它只需要operator<
或自定义比较器,并保证它只被调用一次或两次。文档指出,对于 double
和其他浮点类型,NaN 可能会导致意外结果。
除了clamp()
,您还可以在std::max()
和std::min()
.
double confine(double x, double a, double b) {
return std::max(a, std::min(x, b));
}