代码之家  ›  专栏  ›  技术社区  ›  priyanka.sarkar

为什么结果不一致?

  •  0
  • priyanka.sarkar  · 技术社区  · 16 年前

    如果我使用binet公式和递归公式来查找fibonaci序列,结果会有差异。为什么?

    基本上我是个学生,我们的任务是实现斐波那契级数。所以在做实验的时候,我遇到了这种情况。

    提前谢谢

    1 回复  |  直到 11 年前
        1
  •  4
  •   Aaronaught    16 年前

    斐波那契数是用整数算法生成的。binet公式使用浮点运算。浮点计算总是会有这些小的误差,因为不是每个实数都能准确地表示出来。

    具体来说,8字节 float 在SQL Server中,只有 15-digit mantissa . 它 不能 精确到15个小数点以上。并非巧合,您看到的错误发生在第15位。我冒昧地猜测,低于70的数字是准确的,因为它们在 浮动 .

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

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