0

binet の式でフィボナッチ数を計算していますが、Ruby での除算に問題があります。数字を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 つの例は失敗するのに、後者は私が望むものを与えるのはなぜですか? これは腹立たしいです!

4

2 に答える 2

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 に答える