在C或C ++中是否有一个函数可以对整数进行“饱和”

我正在做一些3D图形,我有一个开放的海洋。 对于这个海洋,我有一个矩阵代表海洋的特定矩形分段的海洋状态(即波浪高度)。 其余的海洋是平坦的。 我的问题是,我的受控海域,有波浪,位于开阔的平坦海面中间,我的网格边缘的不连续性会造成一些不好的瑕疵。 我只为一个分段而不是整个海洋产生波浪的原因是因为我的噪音function在整个海域计算成本过高(而且我知道最简单的解决方案是使用更便宜的噪声function,如单纯噪声,但这不是一个选项)。

说完我的问题非常简单。 如果说我有一个大小为100×40的网格(也就是矩阵又名2d数组),并且我想找到位置120×33的值,我只想取最近的邻居,即100×33。 因此,对于任何位于给定范围之外的数字,我希望该数字在给定范围内饱和。 C或C ++中有一个函数可以做到这一点吗?

编辑:位置参数的类型为float

我知道我可以用一些简单的if语句来做到这一点,但它似乎就像标准库所包含的那样。

template T saturate(T val, T min, T max) { return std::min(std::max(val, min), max); } 

ISO / IEC JTC1 SC22 WG14 N1169 ( 编程语言 – C – 支持嵌入式处理器的扩展 )指定用于饱和数据类型的_Sat类型限定符。 我从未尝试在任何编译器中使用它,但它包含在GCC 4.x文档中 。

VC ++ 2003以后版本支持允许饱和算术的MMX内在函数 。

现在有了std::clamp的forms。 我差不多七年了:)

最小和最大没有?

 x = std::min(100,x); y = std::min(40,y); 

或者如果您喜欢复杂的定义!

 #define DERIVE_MAX (100) //Saturate X at +/-DERIVE_MAX #define SAT(x) ( ((x) > DERIVE_MAX) ? DERIVE_MAX : ( (-(x) > DERIVE_MAX) ? (-DERIVE_MAX) : (x) ) )