如何确保数字在一定范围内?

时间:2015-04-11 03:34:16

标签: c++ boost stl

假设我有一些价值:

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函数可以为我执行此操作?

2 个答案:

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