【发布时间】:2012-03-08 14:18:33
【问题描述】:
给定一个实数(n),这个实数可以是最大值(上)和这个实数可以是最小值(下),我们怎样才能最有效地剪裁 n,使其保持在下限和上限之间?
当然,使用一堆 if 语句可以做到这一点,但这很无聊!更紧凑、更优雅/更有趣的解决方案呢?
我自己的快速尝试(C/C++):
float clip( float n, float lower, float upper )
{
n = ( n > lower ) * n + !( n > lower ) * lower;
return ( n < upper ) * n + !( n < upper ) * upper;
}
我确信还有其他更好的方法可以做到这一点,这就是为什么我把它放在那里..!
【问题讨论】:
-
"cap" 通常只指一个上限。你想要的词是“剪辑”。
-
我怀疑效率,但您的解决方案确实不可读。为什么不直接定义某种“clamp”函数并使用它。
-
另请阅读此相关问题:stackoverflow.com/questions/427477/…
-
嗯做了一个搜索并错过了:/一定是因为我最初使用的术语是 cap,而不是 clip/clamp。谢谢