有人可以向我解释一下这个 MIDP Java 函数是如何工作的吗?我对所使用的运算符特别好奇。
public static final int smoothDivide(int numerator, int denominator) {
return (int) ((numerator << 16) / denominator + 32768L) >> 16;
}
非常感谢
最佳答案
这是一种四舍五入到最接近整数的除法算法。相当于
Math.round((float) numerator / denominator)
适用于大范围的整数,但无需浮点运算即可轻松实现。
运算符(operator)<<
和>>
是bitwise shift left and shift right运算符。
这是其工作原理的直觉
首先请注意<< 16
和>> 16
相当于* 65536
和/ 65536
分别。那么算法的计算如下:
/ numerator * 65536 \
result = ( ------------------ + 32768 ) / 65536
\ denominator /
也就是说,它会放大分子,除以分子,加上一半的比例,然后再次缩小。
它类似于表达式 (int) ((numerator + 0.5) / denominator)
这是进行“舍入”除法的更常见方法(但它依赖于浮点运算)。
关于java - JavaME 函数帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849367/