如何确保数字在范围内?

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));
}