与分裂的红宝石数学问题

时间:2012-11-02 05:51:48

标签: ruby math casting division

我用binet的公式计算斐波纳契数,而我在划分红宝石方面遇到了麻烦。我已经尝试过输入数字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

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

2 个答案:

答案 0 :(得分:2)

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

您需要在分子周围添加一个括号,以确保在分割之前对两个部分进行子跟踪。

答案 1 :(得分:1)

您缺少括号

fib=((1 + sqrt(5))**n - (1-sqrt(5))**n) / (2**n * sqrt(5))
=> 5.000000000000001