我的Java power方法的效率如何?

Ray*_*uin 13 java math performance

所以我参加了面试,他们让我在白板上写了一个快速的数学方法,这就是我在那里写的

public static double pow(double base, double power) {
    double result = 1.0;
    for(double x = 0; x < power; x++) {
        result = result * base;
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

这很有效,他们对此感到满意,但后来又开始问我如何才能让它更有效率,而且我没有回应.所以我的问题是,你能比这更有效率,还是只是一个让我流汗的问题?我认为可能有一些直接的位移解决方案,但我不确定,我认为这只适用于2的幂?有任何想法吗?

*编辑 对不起,我忘了提到方法签名是给我的(双打作为输入),我被告知我不能使用任何内置的数学库.

Lou*_*man 20

http://en.wikipedia.org/wiki/Exponentiation_by_squaring "基本方法"是O(log n),与此O(n)算法相反.(Guava有一个非递归的实现.)

此外,您的功率参数几乎肯定应该是int.(如果你真的想要实现一个算法来将数字提升到非整数幂,你将需要更多的数学.)

  • 好吧,当我在世界的另一边写评论时,你会读到我的想法. (3认同)