Math.pow(底数x,指数y)

举一个简单的例子:

int a=3;

int b=3;

int c = (int) Math.pow(a, b);

System.out.println(c);

结果: 输出27。 实际上这里就是计算3的三次方。

基础用法:用math.pow()实现数组的交错求和

int ant=0;

int a =0;

int[] b = {1,2,3,4,5,6,7,8,9};

for(int i =0; i< b.length; i++) {

a += b[i] * Math.pow(-1, ant);

ant++;

}

System.out.println(a);

结果:输出5。

说明:上面这个例子用了一个从1到9的数组,进行了数组交错求和,1-2+3-4+5-6+7-8+9=5

效果:a=b[0]-b[1]+b[2]-b[3]+b[4]....

可能导致错误的情况:

1.如果底数 x 为负数并且指数 y 不是整数,将会返回NaN。

double a = Math.pow(-1, 1.2);

System.out.println(a);

结果: NaN

2.如果底数 x 是 0,指数 y 是负数,将会返回Infinity (无穷)。

double a = Math.pow(0, -1);

System.out.println(a);

结果: Infinity

从数学的角度来讲:0的负1次方无意义。因为一个数的负1次方是这个数的倒数,而0不能作为分母,所以0的负1次方无意义

3.如果返回值太大,将会返回Infinity (无穷)。

double a = Math.pow(10, 309);

System.out.println(a);

结果: Infinity,这里10的309次方超过了double的上限。

扩展一下基础的数学知识方便理解:Math.pow(底数x,指数y)

1. 当指数为-1时,也就是去求 1/x

double a = Math.pow(100, -1);

double b = Math.pow(0, -1);

double c = Math.pow(-100, -1);

System.out.println(a);

System.out.println(b);

System.out.println(c);

结果:

0的负一次方等于无穷的原因在上面有讲,不知道可以回上面看看。

2. 当指数为0时,也就是去求x的0次方,那么结果一定是返回1.0

double a = Math.pow(2147483647, 0);

double b = Math.pow(0, 0);

double c = Math.pow(-2147483648, 0);

System.out.println(a);

System.out.println(b);

System.out.println(c);

结果:

这里用了int的边界值来测试。

3. 当指数为0.5(1/2)时,也就是去求 根号x

double a = Math.pow(100, 0.5);

double b = Math.pow(0, 0.5);

double c = Math.pow(-100, 0.5);

System.out.println(a);

System.out.println(b);

System.out.println(c);

结果:

根号100等于10.

根号0等于0。

根号-100出现了NaN。 对于实数而言,偶次根式下面的实数,必须要是非负数,其实这里还涉及到了虚数这个概念,不过Math.pow似乎不区分这类情况,所以感兴趣再去了解这个概念吧,这里不做讲解了。

------------------------------------------------------------------------------------------

这里 int c=(int)Math.pow(a,b) 中添加了一个(int),这是强制类型转换(cast),

之所以要用是因为Math.pow(a,b) 的计算结果返回是double类型,double类型转换为int类型就需要用到。

我们可以看看如果不加(int) ,程序是会提示你去 Cast to 'int'