0

我正在用比奈公式计算斐波那契数,但我在用红宝石除法时遇到了麻烦。我尝试将数字转换为 to_f 等但无济于事。我会告诉你什么有效,什么无效然后也许你可以告诉我为什么。

以下不起作用

n=5
fib=(1 + sqrt(5))**n - (1-sqrt(5))**n / (2**n * sqrt(5))
puts fib #outputs 354.9257634247335 which is a bunch of garbage

我也试过

n=5
fib=((1 + sqrt(5))**n).to_f - ((1-sqrt(5))**n).to_f / (2**n * sqrt(5)).to_f
puts fib #outputs the exact same thing as above

但是以下作品

n=5
fib1=(1 + sqrt(5))**n - (1-sqrt(5))**n
fib2=(2**n * sqrt(5))
fib = fib1/fib2
puts fib.round(0) #outputs 5 which is correct

为什么前两个例子失败了,但后者给了我想要的东西?这真气人!

4

2 回答 2

2

您的操作顺序有问题。除法的优先级高于减法,因此在前两个示例中,只有第二个数字被除法。

您需要在分子周围添加一个括号,以确保两个部分在被划分之前都被减去。

于 2012-11-02T05:56:09.930 回答
1

你缺少括号

fib=((1 + sqrt(5))**n - (1-sqrt(5))**n) / (2**n * sqrt(5))
=> 5.000000000000001
于 2012-11-02T05:56:27.477 回答