给定一个实数(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;
}
我敢肯定还有其他更好的方法可以做到这一点,这就是我把它放在那里的原因..!
原文由 Alex Z 发布,翻译遵循 CC BY-SA 4.0 许可协议
无聊、陈旧、可读且最短的呢:
?
这个表达式也可以像这样“泛化”:
更新
比利奥尼尔补充说: