Math.pow用法及实现探究

Posted 一把刀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Math.pow用法及实现探究相关的知识,希望对你有一定的参考价值。

pow函数在java.lang.Math类中,是求次方的函数,定义为:

public static double pow(double a, double b);

即求a的b次方,例如:

public static void main(String[] args) {
    double a = 2.0D;
    double b = 4.0D;
    double r = Math.pow(a, b);
    System.out.println(r);
    //输出为16.0      
}

查看源码,发现其实现调用了StrictMath类的pow函数,并且,Math中很多函数都调是直接调用了StrictMath类中的函数,而在StrictMath类中方法用native修饰,表明调用的并非java代码,而是其它的。经了解,这里是C代码来实现这些方法的,而这些源码在jdk中并没有公布。

遂思考如何用java来实现呢?最先想到用循环和递归两种方式可实现。如下:

为简化逻辑实现,只考虑了自然数(0和正整数)次幂。

1、循环实现:

static int mypow(int x, int y)    
    {   
        if(y < 0){
            return 0;
        }    
        if(y == 0){
            return 1;
        } 
        if(y == 1){
            return x;
        }
        int result = x;
        for (int i = 1; i < y; i++) {
            result *= x;
        }
        return result;    
    }

 

2、递归实现:

static int mypow(int x, int y)    
    {    
        if(y < 0){
            return 0;
        }    
        if(y == 0){
            return 1;
        } 
        if(y == 1){
            return x;
        }
        int result = 0;    
        int tmp = mypow(x, y/2);    
        if(y % 2 != 0) //奇数    
        {    
            result = x * tmp * tmp;    
        }else{    
            result = tmp * tmp;    
        }    
        return result;    
    }  

 

注:本文所述内容基于JDK1.7。

 

水平有限,上述观点难免有误,仅供参考。欢迎牛们拍砖!

以上是关于Math.pow用法及实现探究的主要内容,如果未能解决你的问题,请参考以下文章

python内置函数

JS中的Math.pow(a,b)方法

为啥这段代码使用 Math.pow 打印“HELLO WORLD”?

在 Java 中使用 BigDecimal 手动 Math.pow

Python的pow函数

C# Math.pow(x, 0.333)