Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Math.cbrt()和Math.pow()的区别_Java - Fatal编程技术网

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)));