我有这个功能
a = 2
b = 6
c = .4
def f(n):
if n == 1:
return a
if n == 2:
return b
else:
return c*f(n-1) + (1-c)*f(n-2)
它是一个简单的递归函数,有两个基本情况。 f(1)得到2,f(2)得到6,这是好的,但f(3)得到3.6000000000000005,当它应该只有3.6。我不明白这些额外数字的来源。可能导致这种情况的原因是什么?
答案 0 :(得分:1)
欢迎来到浮点数学的魔力。你可以在这里找到一个很好的答案:Is floating point math broken? 剧透:不,只是很难。
答案 1 :(得分:0)
在计算机中使用floating point numbers使得必须对数字进行舍入,因为例如,在0.0和1.0之间存在无限实数。因此,计算机需要无限的记忆来代表它们。当然,它不会这样做,而是使用可以精确表示的离散数量的浮点数。如果计算结果不能用任何这些有限浮点数表示,则结果不准确。这就是你在这里发生的事情。