为什么Math.pow在java中计算为长数据类型的错误值

为什么Math.pow在java中计算为长数据类型的错误值,java,long-integer,Java,Long Integer,我试图用Geeksforgeks解决一个数学问题,其中我必须计算出15的幂 long result = (long)Math.pow(a, b); 这里a,b=15 为什么上面的表达式的计算结果为437893890380859392,而它应该是437893890380859375更好地使用biginger,它可以处理更大的值: BigInteger bigInteger = new BigInteger("15").pow(15); System.out.println(bigInte

我试图用Geeksforgeks解决一个数学问题,其中我必须计算出15的幂

long result = (long)Math.pow(a, b);
这里
a,b=15

为什么上面的表达式的计算结果为
437893890380859392
,而它应该是
437893890380859375

更好地使用
biginger
,它可以处理更大的值:

BigInteger bigInteger = new BigInteger("15").pow(15);    
System.out.println(bigInteger);

更好地使用
biginger
,它可以处理更大的值:

BigInteger bigInteger = new BigInteger("15").pow(15);    
System.out.println(bigInteger);

因为浮点数。Math.pow返回一个
double
。查看Math.pow返回的数据类型的范围,看看它是否能容纳预期的结果。我使用wolframalpha.com作为一个方便的工具,用于可能超过Java容量的大型计算。为什么要将其转换为
long
?Math.pow返回一个
double
。你的类型转换来得太晚了!Math.pow已完成并溢出。浮点是一种近似值:2的幂的有限和。相邻双精度值之间的巨大双精度值将增加1以上。因为浮点。Math.pow返回一个
double
。查看Math.pow返回的数据类型的范围,看看它是否能容纳预期的结果。我使用wolframalpha.com作为一个方便的工具,用于可能超过Java容量的大型计算。为什么要将其转换为
long
?Math.pow返回一个
double
。你的类型转换来得太晚了!Math.pow已完成并溢出。浮点是一种近似值:2的幂的有限和。相邻双精度值之间的大双精度值将增加1以上。新的BigDecimal(15)。也可以使用pow(15)。也可以使用新的BigDecimal(15)。pow(15)