小编典典

Java Longs中的斐波那契计算显示为负

java

我的斐波那契计算器可以正常工作,但是当数值更高时,结果将变为负数,就像Integer超过最大值一样。

它正在使用缓存java.util.Map<Integer, Long>。进入的所有内容都与Map预期的一样,但是当打印出来时,我得到例如291的信息:

-784134397488903422

根据http://www.maths.surrey.ac.uk/hosted-
sites/R.Knott/Fibonacci/fibCalcX.html,应为:

2923602405716568564338475449381171413803636207598822186175234

我的Longs 似乎出了点问题,但我不确定到底是什么。有人可以指出正确的方向吗?

Map条目的值:http :
//pastebin.com/uje07Ays


阅读 309

收藏
2020-12-03

共1个答案

小编典典

我认为您超出了可以存储在Java用于long类型的带符号的64位整数中的最大long值之上,有关Long和Java
API中的这些的更多信息:http
//docs.oracle.com/javase/7
/docs/api/java/lang/Long.html。

64位有符号整数的最大正值为2 ^ 63 -1:,9 223 372 036 854 775 807您的值似乎已达到此限制,如果有符号整数的最高位为1,则有符号整数将变为负数(请参阅2的补码整数)更多详细信息:http
:
//en.wikipedia.org/wiki/Two%27s_complement)。

您需要使用BigInteger来具有任意精度的整数http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

2020-12-03