Math.cbrt()和Math.pow()的区别

时间:2014-06-15 06:04:16

标签: java

为什么Math.cbrt(a)提供的结果与Math.pow(a, (1/3))不同?

public class HelloWorld{

 public static void main(String []args){

   int a=8;

   System.out.println(Math.cbrt(a));

   System.out.println(Math.pow(a,(1/3)));
 }
}

SOLN

2.0 1.0

为什么会出现差异?我的数学错误或语法错误或与pow有关吗?

4 个答案:

答案 0 :(得分:3)

System.out.println(Math.pow(a,(1.0/3.0)));
由于整数运算,

1/3将为0,因此您需要转换为double,或者只是使用上面所示的双精度来获得所需的结果。

答案 1 :(得分:1)

在Java 1/3 = 0中,因为您将整数除以整数。如果您使用1 / 3.0,您在Math.pow中的结果就可以了。

答案 2 :(得分:1)

表达式1/3被评估为整数除法,结果为0.然后,pow被称为pow(8, 0),正确返回1.尝试改写pow(a, (1.0 / 3.0))

答案 3 :(得分:0)

您可以注意的另一件事是,使用cbrt()为您提供表达式的正确值,而使用pow()可以为您提供近似值。您可以尝试使用= 64,125,216或343作为参考。如果您尝试通过类型转换来打印相同的int值,那么这不会为pow()语句提供精确的舍入值,并且在大多数情况下会给出错误的值。 我希望这个答案有助于更好地澄清。