替换ceil函数以获取任意范围?

时间:2019-04-14 19:58:47

标签: optimization floating-point algebra

我有几种情况需要将浮点数钳位到任意[1]范围的上端或下端。到目前为止,我一直在使用floorceil函数进行前缩放和后缩放:

y*floor(x/y) - x + y

y*ceil(x/y) - x - y

y的位置指定了我们要捕捉到的范围的大小。这行得通,但感觉不佳,而且这些计算经常发生,足以成为实际的性能瓶颈。现在,事实证明x mod y = x - y*floor(x/y)(这意味着只需一点代数就可以将第一个表达式简化为y - (x mod y),这是两个操作而不是五个操作,并且消除了乘法)。

但是,我在解决如何不使用分支的情况下替换ceil方面遇到了更大的困难(这对性能没有任何好处)。因此,是否有任何方法可以重写y*Math.ceil(x/y)从而给我简化代数的机会,还是我只能坚持这样做?

[1]如果有帮助,y始终是2的整数次幂,并且该指数已缓存并可以使用。

0 个答案:

没有答案