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

How do I ensure a number is within a range?

本文关键字:范围内 数字 何确保 确保      更新时间:2023-10-16

>假设我有一些值:

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

是的,提升算法有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));
}