Показать силы Пи с точностью Фибоначчи

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

Седьмое число Фибоначчи равно 13, поэтому выходные данные для n = 7, ϕ 7 , имеют 13 десятичных знаков. Вы не должны усекать конечные нули, которые бы отображали слишком мало цифр; смотрите вывод для 6 в первой таблице, которая заканчивается одним нулем, чтобы сохранить десятичную точность в 8 цифр.

Возможно, в качестве бонуса, скажите, какое наибольшее число может правильно вывести ваша программа.

CJ Деннис
источник
А как насчет языков, которые не могут обрабатывать столько знаков после запятой? Я получил 24-байтовое решение Pyth, которое работает только до n = 7, так как я не могу отобразить более 15 десятичных знаков. Должен ли я опубликовать это в любом случае?
Денкер
@DenkerAffe Конечно, вы можете опубликовать его, но с пометкой, что он недействителен, потому что он не может выполнить последние три контрольных примера. Кто-то может вдохновить вас добавить точности в ваш ответ!
CJ Деннис

Ответы:

3

постоянный ток, 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 минут и использует 16 ГБ ОЗУ. Однако, учитывая бесконечное время и память, теоретически это может работать для любого значения.

LegionMammal978
источник
1
Не могли бы вы опубликовать вывод, пожалуйста? Мне нужно обмануть и использовать ваш вывод, чтобы добавить последние несколько тестов. В какую сторону вы округлите? Вниз или до ближайшего? «Бесконечные ресурсы» достаточно хороши. Мне не нужно, чтобы у тебя не хватало памяти!
CJ Деннис