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

qua*_*ant 4 c++ boost stl

假设我有一些价值:

double x;
Run Code Online (Sandbox Code Playgroud)

我想限制在某个范围内[a, b],使得结果值在该范围内:

double confine(double x, double a, double b)
{
  if (x < a) return a;
  else if (x > b) return b;
  return x;
}
Run Code Online (Sandbox Code Playgroud)

是否有单个 boost或STL功能可以为我做这个?

chr*_*ris 9

是的,Boost算法有clamp:

double clamped = clamp(x, a, b);
Run Code Online (Sandbox Code Playgroud)

它只需要operator<或自定义比较器,并保证只调用一次或两次.文档指出,使用double和其他浮点类型,NaN可能会导致意外的结果.