【发布时间】:2015-10-16 08:20:50
【问题描述】:
是否有任何无分支或类似的技巧可以将整数限制在 0 到 255 的区间内,或者将整数限制在 0.0 到 1.0 的区间内? (这两个范围都是封闭的,即端点都包含在内。)
我正在使用明显的最小-最大检查:
int value = (value < 0? 0 : value > 255? 255 : value);
但是有没有办法让这个更快——类似于“模”钳value & 255?有没有办法用浮点做类似的事情?
我正在寻找一种便携式解决方案,所以最好不要使用特定于 CPU/GPU 的东西。
【问题讨论】:
-
如果您使用
value = min (value, 255),您的编译器可以为您完成工作,尤其是当硬件包含整数MIN操作时。 min/max 的无分支序列是众所周知的,并且经常被合并到编译器中。
标签: math language-agnostic floating-point bit-manipulation integer-arithmetic