Tampilkan kekuatan Phi dengan presisi Fibonacci

9

Menulis beberapa kode yang mengambil satu bilangan bulat non-negatif n dan output n kekuatan Phi (φ, Rasio Emas, sekitar 1,61803398874989) dengan jumlah yang sama angka desimal sebagai n nomor Fibonacci.

Kode Anda harus menghasilkan urutan digit yang benar untuk semua input hingga setidaknya 10 (55 digit desimal). Outputnya harus berupa desimal yang dapat dibaca manusia. Anda dapat memilih apakah akan membulatkan digit terakhir ke nilai terdekat, atau memotong nilainya. Silakan tentukan yang mana kode Anda menggunakan.

n dan output, hingga 10, pembulatan ke bawah:

 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 dan output, hingga 10, pembulatan ke nilai terdekat:

 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

Angka Fibonacci 7 adalah 13, sehingga output untuk n = 7, ϕ 7 , memiliki 13 tempat desimal. Anda tidak boleh memotong nol trailing yang akan menampilkan terlalu sedikit digit; lihat output untuk 6 pada tabel pertama, yang berakhir dengan nol tunggal untuk menjaga presisi desimal pada 8 digit.

Mungkin sebagai bonus, katakan berapa angka tertinggi yang dapat dihasilkan oleh program Anda dengan benar.

CJ Dennis
sumber
Bagaimana dengan bahasa yang tidak bisa menangani banyak tempat desimal itu? Saya mendapat solusi Pyth 24 byte di sini yang hanya berfungsi sampai n = 7, karena saya tidak dapat menampilkan lebih dari 15 tempat desimal. Haruskah saya mempostingnya?
Denker
@DenkerAffe Tentu, Anda dapat mempostingnya tetapi dengan catatan yang mengatakan itu tidak valid karena tidak dapat melakukan tiga kasus uji terakhir. Mungkin inspirasi bagi seseorang untuk menambah ketepatan jawaban Anda!
CJ Dennis

Jawaban:

3

dc, 26 byte

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

Karena ketepatan awal 99 digit setelah koma, ini akan bekerja untuk Anda input 11 . Presisi dinamis (atau statis lebih tinggi) dimungkinkan, tetapi akan meningkatkan jumlah byte.

Uji kasus

$ 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

Bagaimana itu bekerja

Karena output yang diinginkan adalah φ n , kita dapat menghitung angka Fibonacci F (n) sebagai ⌊φ n ÷ √5 + 0,5⌋ dengan sedikit usaha tambahan.

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.
Dennis
sumber
0

Mathematica, 50 byte

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

Solusi dasar. Membulatkan ke nilai terdekat. Masih memverifikasi nilai tertinggi yang tidak akan membuat komputer saya kehabisan memori. Input 32berfungsi, tetapi butuh 45 menit dan menggunakan 16GiB RAM. Namun, mengingat waktu dan memori yang tak terbatas, ini secara teoritis dapat berjalan untuk nilai apa pun.

LegionMammal978
sumber
1
Maukah Anda memposting output? Saya perlu menipu dan menggunakan output Anda untuk menambahkan beberapa test case terakhir. Ke mana Anda membulatkan? Turun atau ke terdekat? "Sumber daya tak terbatas" cukup baik. Saya tidak meminta Anda kehabisan memori!
CJ Dennis