Java Math.cbrt()和Math.pow()的区别
为什么Java Math.cbrt()和Math.pow()的区别,java,Java,为什么Math.cbrt(a)给出的结果与Math.pow(a,(1/3))不同 索恩 2.0 1.0 为什么会有差异?我的数学错了,语法错了,还是跟pow有关 System.out.println(Math.pow(a,(1.0/3.0))); 由于整数运算,1/3将是0,因此您需要转换为double,或者简单地使用如上所示的double,以获得所需的结果 由于整数运算,1/3将是0,因此您需要将其转换为双精度,或者简单地使用如上所示的双精度,以获得所需的结果。在Java中,1/3=0,因为
Math.cbrt(a)
给出的结果与Math.pow(a,(1/3))
不同
索恩
2.0
1.0
为什么会有差异?我的数学错了,语法错了,还是跟pow有关
System.out.println(Math.pow(a,(1.0/3.0)));
由于整数运算,1/3将是0,因此您需要转换为double,或者简单地使用如上所示的double,以获得所需的结果
由于整数运算,1/3将是0,因此您需要将其转换为双精度,或者简单地使用如上所示的双精度,以获得所需的结果。在Java中,1/3=0,因为您将整数除以整数。如果您使用1/3.0,那么Math.pow中的结果将很好。在Java中1/3=0,因为您将整数除以整数。如果使用1/3.0,则Math.pow中的结果将很好。表达式1/3作为整数除法计算,结果为0。然后,pow被称为
pow(8,0)
,它正确地返回1。尝试编写pow(a,(1.0/3.0))
。表达式1/3作为整数除法计算,结果为0。然后,pow被称为pow(8,0)
,它正确地返回1。请尝试编写pow(a,(1.0/3.0))
。您可能需要注意的另一件事是,使用cbrt()为表达式提供准确的正确值,而使用pow()为表达式提供近似值。您可以尝试使用a=64、125、216或343作为参考。这不会为pow()语句提供精确的取整值,如果您试图按类型转换打印同一语句的int值,则在大多数情况下会给出错误的值。
我希望这个答案有助于更好的解释。您可能需要注意的另一件事是,使用cbrt()可以为表达式提供准确的正确值,而使用pow()可以为表达式提供近似值。您可以尝试使用a=64、125、216或343作为参考。这不会为pow()语句提供精确的取整值,如果您试图按类型转换打印同一语句的int值,则在大多数情况下会给出错误的值。
我希望这个答案有助于更好地澄清。整数算术再次出现@用户3580294,你能解释一下吗!!!“请不要降低评分”-哎呀,我错过了“不要”部分。对不起,请尝试
System.out.println(1/3)代码>谷歌在这方面也会有很大帮助。是一个开始的地方。哦,我真傻,谢谢!!!整数算术又来了@用户3580294,你能解释一下吗!!!“请不要降低评分”-哎呀,我错过了“不要”部分。对不起,请尝试System.out.println(1/3)代码>谷歌在这方面也会有很大帮助。是一个开始的地方。哦,我真傻,谢谢!!!如果要使用1.0
或3.0
则不需要强制转换。而且,现在真的没有太多理由使用float
——只要使用double
,额外的精度几乎总是一件好事。是的,你在我发布第二条评论时编辑正确。现在回答得好。不过,对什么是“整数算术”进行一些详细说明是很好的。如果要使用1.0
或3.0
则不需要强制转换。而且,现在真的没有太多理由使用float
——只要使用double
,额外的精度几乎总是一件好事。是的,你在我发布第二条评论时编辑正确。现在回答得好。不过,关于什么是“整数算术”的一些详细说明会很好。该规范要求cbrt
在两个方向上都精确到1 ulp以内。变窄时,向零执行舍入。就我所知,不能保证它能“正确”地圆化大的完美立方体cbrt
可能比pow
更精确,但一般来说没有办法精确。请注意pow
具有类似的精度保证,因此差异可能非常小,可能是由于指数表示不精确。规范要求cbrt
在任一方向上的精度均在1 ulp以内。变窄时,向零执行舍入。就我所知,不能保证它能“正确”地圆化大的完美立方体cbrt
可能比pow
更精确,但通常无法使其精确。请注意,pow
具有类似的精度保证,因此差异可能非常小,可能是由于指数表示(非常轻微)不精确造成的。
System.out.println(Math.pow(a,(1.0/3.0)));