【发布时间】:2023-03-09 17:38:01
【问题描述】:
我正在研究一个本质上是斐波那契数列的问题陈述:
给定两个初始值作为输入,计算 term x = (term x-1)^2 + (term x-2)
所以,给定输入 0 1 5,我们要计算序列的第 5 项,按以下方式完成:
第 3 项 = (第 2 项)^2+(第 1 项) = 1^2 + 0 = 1
第 4 项 = (第 3 项)^3+(第 2 项) = 1^1 + 1 = 2
第 5 项 = 2^2+1 = 5
等等。
当我尝试计算一个较大的值时,比如第 10 个,我的问题就出现了。使用 long 作为我的数据类型,我在第 10 个值处精确丢失了精度。预期/正确的值是`84266613096281243382112,但我明白了..
0 1 10
Term number 3 has value 1
Term number 4 has value 2
Term number 5 has value 5
Term number 6 has value 27
Term number 7 has value 734
Term number 8 has value 538783
Term number 9 has value 290287121823
Term number 10 has value 1886167576011600224
使用double作为我的数据类型做同样的问题,而不是给我正确的答案,但不是我需要的格式(这是用于自动化测试用例)。
0 1 10
Term number 3 has value 1.0
Term number 4 has value 2.0
Term number 5 has value 5.0
Term number 6 has value 27.0
Term number 7 has value 734.0
Term number 8 has value 538783.0
Term number 9 has value 2.90287121823E11
Term number 10 has value 8.426661309628124E22
为什么我会遇到这种长时间的精度损失,我该如何防止它/获得我想要的输出?
【问题讨论】:
标签: java double long-integer