开发者

Help with JavaME Function

开发者 https://www.devze.com 2023-02-07 11:08 出处:网络
Could anyone explain to me how this MIDP Java function works? I\'m particularly curious about the operators being used.

Could anyone explain to me how this MIDP Java function works? I'm particularly curious about the operators being used.

public 开发者_开发百科static final int smoothDivide(int numerator, int denominator) {
    return (int) ((numerator << 16) / denominator + 32768L) >> 16;
}

Thanks a lot


This is a division algorithm that rounds to the closest integer. It is equivalent to

Math.round((float) numerator / denominator)

for a large range of the integers, but cleaverly implemented without floating point operations.

The operators << and >> are bitwise shift left and shift right operators.


Here is the intuition for how it works

First note that << 16 and >> 16 are equivalent to * 65536 and / 65536 respectively. So what the algorithm computes is the folowing:

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

That is, it scales up the numerator, divides it, adds half of the scale, and then scales it down again.

It is similar to the expression (int) ((numerator + 0.5) / denominator) which is a more common way to do "rounded" division (but it relies on floating point arithmetic).

0

精彩评论

暂无评论...
验证码 换一张
取 消