快速提问,为啥我的指数有上限? [复制]
Posted
技术标签:
【中文标题】快速提问,为啥我的指数有上限? [复制]【英文标题】:Quick question, why is my exponents capped? [duplicate]快速提问,为什么我的指数有上限? [复制] 【发布时间】:2020-07-16 08:56:28 【问题描述】:public static void main(String[] args)
int res = (int)Math.pow(2017, 202);
System.out.println(res);
这会输出 2147483647
这显然是错误的,如果我输入其他指数,输出保持不变。 我该如何移除这个上限?是什么原因造成的?
【问题讨论】:
只需使用BigInteger
:BigInteger result = BigInteger.valueOf(2017).pow(202)
如果您正在为某种编码/数学测验/问题进行计算,那么实际上根本不需要计算功率,例如如果你之后mod
【参考方案1】:
要移除上限,请使用不同的数据类型。
int
的上限为 2^31-1,long
的上限为 2^63-1,但 AFAIK BigInteger 没有上限:
BigInteger res = new BigInteger("2017").pow(202)
但是,不要将它用于正常计算,因为它要慢得多。
【讨论】:
BigInteger
is capped, but not enforced by the specs
Here's what Math.pow(2017, 202)
is.以上是关于快速提问,为啥我的指数有上限? [复制]的主要内容,如果未能解决你的问题,请参考以下文章