Покажіть сили Phi з точністю Фібоначчі


9

Напишіть деякий код, який приймає одне невід’ємне ціле число n та виводить n- ту силу Phi (ϕ, Золоте співвідношення, приблизно 1.61803398874989) з такою ж кількістю десяткових цифр, як і n-е число Фібоначчі.

Ваш код повинен створити правильну послідовність цифр для всіх входів, щонайменше, до 10 (55 десяткових цифр). Вихід повинен бути зрозумілим для людини десятком. Ви можете вибрати, чи слід округляти останню цифру до найближчого значення, або обрізати значення. Вкажіть, будь ласка, який з них використовується ваш код.

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 у першій таблиці, яка закінчується в один нуль, щоб зберегти десяткову точність у 8 цифр.

Можливо, в якості бонусу скажіть, яке саме число може правильно вивести ваша програма.


Що з мовами, які не можуть обробити стільки знаків після коми? Тут я отримав 24-байтове рішення Pyth, яке працює лише до n = 7, оскільки я не можу відобразити більше 15 знаків після коми. Чи варто це все-таки опублікувати?
Денкер

@DenkerAffe Звичайно, ви можете опублікувати його, але з приміткою, що це неправда, оскільки він не може зробити останні три тестові справи. Можливо, хтось натхненник додасть точності до вашої відповіді!
CJ Dennis

Відповіді:


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

Математика, 50 байт

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

Основне рішення. Обходить до найближчого значення. Я все ще підтверджую найвище значення, яке не змусить мого комп’ютера втратити пам'ять. Введення 32працює, але це займає 45 хвилин і використовує 16 Гбіт оперативної пам’яті. Однак, враховуючи нескінченний час і пам’ять, теоретично це може працювати для будь-якої цінності.


1
Ви б опублікували вихід, будь ласка? Мені потрібно обдурити і використати ваш вихід, щоб додати останні кілька тестових випадків. Яким способом ви округляєте? Вниз або до найближчого? "Безмежні ресурси" досить хороші. Я не вимагаю, щоб у вас не вистачало пам’яті!
CJ Dennis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.