フィボナッチ精度でファイのパワーを表示


9

単一の非負の整数nを取り、n番目のフィボナッチ数と同じ桁数でPhi のn乗(ϕ、黄金比、約1.61803398874989)を出力するコードを記述します。

コードは、少なくとも10(10進数55桁)までのすべての入力に対して正しい数字のシーケンスを生成する必要があります。出力は人間が読める10進数でなければなりません。最後の桁を最も近い値に丸めるか、値を切り捨てるかを選択できます。コードで使用するものを指定してください。

nおよび出力、最大10、切り捨て:

 0   1
 1   1.6
 2   2.6
 3   4.23
 4   6.854
 5  11.09016
 6  17.94427190
 7  29.0344418537486
 8  46.978713763747791812296
 9  76.0131556174964248389559523684316960
10 122.9918693812442166512522758901100964746170048893169574174

nおよび最大10までの出力。最も近い値に丸めます。

 0   1
 1   1.6
 2   2.6
 3   4.24
 4   6.854
 5  11.09017
 6  17.94427191
 7  29.0344418537486
 8  46.978713763747791812296
 9  76.0131556174964248389559523684316960
10 122.9918693812442166512522758901100964746170048893169574174

7番目のフィボナッチ数は13なので、n = 7、ϕ 7の出力は小数点以下13桁になります。桁数が少なすぎる末尾のゼロは切り捨てないでください。最初の表の6の出力を参照してください。10進数の精度を8桁に保つために、単一のゼロで終わります。

たぶんおまけとして、プログラムが正しく出力できる最大数は何かと言います。


小数点以下の桁数を処理できない言語についてはどうですか?小数点以下15桁を表示できないため、n = 7までしか機能しない24バイトのPythソリューションを取得しました。とにかく投稿しますか?
Denker、2016

@DenkerAffe確かに、投稿できますが、最後の3つのテストケースを実行できないため、有効ではないというメモが付いています。誰かがあなたの答えに正確さを加えることがインスピレーションになるかもしれません!
CJデニス

回答:


3

dc、26バイト

99k5v1+2/?^d5v/.5+0k1/k1/p

コンマの後の99桁の初期精度により、これは入力11で機能します。動的(またはより高い静的)精度が可能ですが、バイト数が増えます。

テストケース

$ for ((i = 0; i < 11; i++)) { dc -e '99k5v1+2/?^d5v/.5+0k1/k1/p' <<< $i; }
1
1.6
2.6
4.23
6.854
11.09016
17.94427190
29.0344418537486
46.978713763747791812296
76.0131556174964248389559523684316960
122.9918693812442166512522758901100964746170048893169574174

使い方

所望の出力であるので、φ nは、我々は、フィボナッチ数を計算することができるF(n)をとして⌊φ N ÷√5+0.5⌋少し追加の労力で。

99k                         Set the precision to 99.
   5v                       Compute the square root of 5.
     1+                     Add 1.
       2/                   Divide by 2.
                            This pushes the golden ratio.
         ?                  Read the input from STDIN.
          ^                 Elevate the golden ratio to that power.
           d                Push a copy.
            5v/             Divide it by the square root of 5.
               .5+          Add 0.5.
                  0k        Set the precision to 0.
                    1/      Divide by 1, truncating to the desired precision.
                            This pushes F(n).
                      k     Set the precision to F(n).
                       1/   Divide by 1, truncating to the desired precision.
                         p  Print.

0

Mathematica、50バイト

N[GoldenRatio^#,2^#]~NumberForm~{2^#,Fibonacci@#}&

基本的なソリューション。最も近い値に丸めます。コンピュータがメモリ不足になることのない最も高い値を確認しています。入力は32機能しますが、45分かかり、16GiBのRAMを使用します。ただし、無限の時間とメモリを考えると、これは理論的にはどのような値でも実行できます。


1
出力を投稿していただけますか?最後のいくつかのテストケースを追加するには、チートして出力を使用する必要があります。あなたはどちらに丸めていますか?ダウンまたは最も近いですか?「無限のリソース」で十分です。私はあなたがメモリ不足になることを要求しません!
CJデニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.