为什么结果会有差异?

时间:2009-12-31 02:50:50

标签: sql-server sql-server-2005 math floating-point floating-accuracy

如果我使用Binet公式和递归公式来寻找斐波那契系列,结果就会出现差异。为什么呢?

基本上我是学生,这是我们实施斐波那契系列的任务。因此,在进行实验时,我遇到了这种情况。

提前致谢

1 个答案:

答案 0 :(得分:4)

Fibonacci数是使用整数运算生成的。 Binet公式使用浮点运算。浮点计算总是会有这些小的不准确性,因为不是每个实数都能准确表示。

具体来说,SQL Server中的8字节float只有15-digit mantissa。它不能比15个小数点更精确。并非巧合,您所看到的错误发生在第15位。我猜测低于70的数字是准确的,因为它们在float的精度限制范围内。

换句话说,这种行为是设计的。使用浮点数学可以达到的精度是有限的,而且你已经达到了它。为了超越这个范围,你必须使用一个任意精度的数学库,我不知道SQL Server环境中有任何可用的(虽然这并不一定意味着它们不存在)。 / p>

P.S。递归是一种在数据库中生成Fibonacci数,尤其是的非常低效的方法。如果这不仅仅是一个学术练习,那么我建议切换到迭代解决方案。

相关问题