我的斐波那契计算器可以正常工作,但是当数值更高时,结果将变为负数,就像Integer超过最大值一样。
Integer
它正在使用缓存java.util.Map<Integer, Long>。进入的所有内容都与Map预期的一样,但是当打印出来时,我得到例如291的信息:
java.util.Map<Integer, Long>
Map
-784134397488903422
根据http://www.maths.surrey.ac.uk/hosted- sites/R.Knott/Fibonacci/fibCalcX.html,应为:
2923602405716568564338475449381171413803636207598822186175234
我的Longs 似乎出了点问题,但我不确定到底是什么。有人可以指出正确的方向吗?
Long
Map条目的值:http : //pastebin.com/uje07Ays
64位有符号整数的最大正值为2 ^ 63 -1:,9 223 372 036 854 775 807您的值似乎已达到此限制,如果有符号整数的最高位为1,则有符号整数将变为负数(请参阅2的补码整数)更多详细信息:http : //en.wikipedia.org/wiki/Two%27s_complement)。
9 223 372 036 854 775 807
您需要使用BigInteger来具有任意精度的整数http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html。