2012-11-02 107 views
0

我用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

在另一方面,比奈的公式只能實際上可用於小值,由於彩車的精度限制。 – Antimony

+0

這是正確的,我會說5是一個非常小的數字:) – ctilley79

+0

我想我可以使用BigDecimal,但 – ctilley79

回答

1

你缺少括號

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

我可以發誓我試圖在括號中封裝整個分子。誰知道。感謝您回答一個簡單的問題 – ctilley79

2

您在操作順序方面存在問題。分部比減法具有更高的優先級,所以在前兩個例子中,只有第二個數字被分割。

您需要在分子周圍添加一個圓括號,以確保兩個部分在被分割之前被減去。