帮助JavaME功能

时间:2011-01-31 09:40:04

标签: 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;
}

非常感谢

1 个答案:

答案 0 :(得分:3)

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

Math.round((float) numerator / denominator)

用于大范围的整数,但是在没有浮点运算的情况下实现了切割。

运营商<<>>bitwise shift left and shift right运营商。


这是它如何运作的直觉

首先请注意,<< 16>> 16分别相当于* 65536/ 65536。那么算法计算的是下面的内容:

            / numerator * 65536           \
result  =  ( ------------------  +  32768  )  /  65536
            \   denominator               /

也就是说,它会对分子进行放大,除以它,增加一半的比例,然后再将其缩小。

它类似于表达式(int) ((numerator + 0.5) / denominator),它是进行“舍入”除法的更常用方法(但它依赖于浮点运算)。