JavaME函数的帮助

JavaME函数的帮助,java,java-me,operators,midp,integer-division,Java,Java Me,Operators,Midp,Integer Division,有人能给我解释一下这个MIDP Java函数是如何工作的吗?我对正在使用的操作符特别好奇 public static final int smoothDivide(int numerator, int denominator) { return (int) ((numerator << 16) / denominator + 32768L) >> 16; } 公共静态最终整数平滑除法(整数分子、整数分母){ 返回(int)((分子>16; } 非常感谢这是一种

有人能给我解释一下这个MIDP Java函数是如何工作的吗?我对正在使用的操作符特别好奇

public static final int smoothDivide(int numerator, int denominator) {
    return (int) ((numerator << 16) / denominator + 32768L) >> 16;
}
公共静态最终整数平滑除法(整数分子、整数分母){
返回(int)((分子>16;
}

非常感谢

这是一种四舍五入到最接近整数的除法算法。它相当于

Math.round((float) numerator / denominator)
用于大范围的整数,但在实现时不使用浮点运算

操作员
是操作员


以下是它如何工作的直觉 首先要注意的是,
>16
分别相当于
*65536
/65536
。因此,该算法计算如下:

            / numerator * 65536           \
result  =  ( ------------------  +  32768  )  /  65536
            \   denominator               /
也就是说,它将分子放大,除以,加上一半,然后再缩小


它类似于表达式
(int)((分子+0.5)/分母)
,这是一种更常见的“四舍五入”除法(但它依赖于浮点算术)。

这就是代码注释的用途。