繁体   English   中英

如何为 Java 中的大数写一个幂 function

[英]How to write a power function for big numbers in Java

假设我想使用Math.pow()计算2^10000 我的代码是-

long num = (long)Math.pow(2, 10000);
System.out.println(num);

在这里,我得到 output 为9223372036854775807 ,我猜这是 long 的限制。 但如果我这样写——

double n = Math.pow(2, 10000);
System.out.println(n); 

o/p 是Infinity ,这有点奇怪。 任何人都请帮我解决这个问题。

2^10000 超出了 long 和 double 的限制。 但是,在 Java 中,对 long 和 double 中的溢出进行了不同的处理。 如果将 1 加到 long 中的最大可能值,则回绕,结果是 long 中可能的最小值,等于 -2^63。 另一方面,如果你将 1 加到双精度中的最大可能值,你会得到 Double.POSITIVE_INFINITY。 See https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html andhttps://docs.oracle.com/javase/8/docs/api/java/lang/Double .html了解更多信息。

这会起作用,但请注意BigInteger效率不高,我认为它不适合数学问题的生产工作。

public static void main( String[] args ) {
  BigInteger two = new BigInteger( "2" );
  BigInteger twoToTenThousand = two.pow( 10000 );
  System.out.println( twoToTenThousand );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM