谁能向我解释这个 MIDP Java 函数是如何工作的?我对正在使用的运算符特别好奇。
public static final int smoothDivide(int numerator, int denominator) {
return (int) ((numerator << 16) / denominator + 32768L) >> 16;
}
非常感谢
谁能向我解释这个 MIDP Java 函数是如何工作的?我对正在使用的运算符特别好奇。
public static final int smoothDivide(int numerator, int denominator) {
return (int) ((numerator << 16) / denominator + 32768L) >> 16;
}
非常感谢
这是一种四舍五入到最接近整数的除法算法。它相当于
Math.round((float) numerator / denominator)
对于大范围的整数,但在没有浮点运算的情况下巧妙地实现。
运算符<<
和>>
是按位左移和右移运算符。
首先注意<< 16
and>> 16
分别等价于* 65536
and / 65536
。所以算法计算的是以下内容:
/ numerator * 65536 \
result = ( ------------------ + 32768 ) / 65536
\ denominator /
也就是说,它放大分子,除以,加上一半的比例,然后再次缩小。
它类似于表达式(int) ((numerator + 0.5) / denominator)
,这是一种更常见的“四舍五入”除法(但它依赖于浮点运算)。