【问题标题】:Help with JavaME FunctionJavaME 函数帮助
【发布时间】:2011-01-31 09:40:03
【问题描述】:

谁能向我解释一下这个 MIDP Java 函数是如何工作的?我对使用的运算符特别好奇。

public static final int smoothDivide(int numerator, int denominator) {
    return (int) ((numerator << 16) / denominator + 32768L) >> 16;
}

非常感谢

【问题讨论】:

  • 这就是 code-cmets 的用途。

标签: java java-me operators midp integer-division


【解决方案1】:

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

Math.round((float) numerator / denominator)

对于大范围的整数,但在没有浮点运算的情况下巧妙地实现。

运算符&lt;&lt; 和&gt;&gt; 是bitwise shift left and shift right 运算符。


这是它如何工作的直觉

首先注意&lt;&lt; 16和&gt;&gt; 16分别相当于* 65536和/ 65536。所以算法计算的是以下内容:

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

也就是说,它把分子放大,除以,加上一半,然后再缩小。

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

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 2010-11-20
    • 1970-01-01
    • 2019-05-12
    • 2011-06-21
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多