Wyświetlaj moc Phi z precyzją Fibonacciego

9

Napisz kod, który przyjmuje pojedynczą nieujemną liczbę całkowitą n i wysyła n-tą potęgę Phi (ϕ, Golden Ratio, około 1.61803398874989) z taką samą liczbą cyfr dziesiętnych jak n-ta liczba Fibonacciego.

Twój kod musi generować prawidłową sekwencję cyfr dla wszystkich danych wejściowych do co najmniej 10 (55 cyfr dziesiętnych). Dane wyjściowe muszą być dziesiętne czytelne dla człowieka. Możesz wybrać, czy zaokrąglić ostatnią cyfrę do najbliższej wartości, czy też ją przyciąć. Podaj, którego używa Twój kod.

ni wyjście, do 10, zaokrąglając w dół:

 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 i wyjście, do 10, zaokrąglając do najbliższej wartości:

 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

Siódma liczba Fibonacciego wynosi 13, więc wynik dla n = 7, ϕ 7 , ma 13 miejsc po przecinku. Nie wolno obcinać końcowych zer, które wyświetlałyby zbyt mało cyfr; patrz wynik dla 6 w pierwszej tabeli, która kończy się pojedynczym zerem, aby zachować dokładność dziesiętną na 8 cyfrach.

Może jako bonus powiedz, jaka jest najwyższa liczba, którą Twój program może poprawnie wypisać.

CJ Dennis
źródło
Co z językami, które nie radzą sobie z tyloma miejscami po przecinku? Mam tutaj 24-bajtowe rozwiązanie Pyth, które działa tylko do n = 7, ponieważ nie mogę wyświetlić więcej niż 15 miejsc po przecinku. Czy mimo to powinienem to opublikować?
Denker
@DenkerAffe Pewnie, możesz to opublikować, ale z notatką informującą, że jest nieważna, ponieważ nie może wykonać trzech ostatnich przypadków testowych. Może być inspiracją dla kogoś, kto doda precyzji do twojej odpowiedzi!
CJ Dennis

Odpowiedzi:

3

dc, 26 bajtów

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

Ze względu na początkową precyzję 99 cyfr po przecinku zadziała to na wprowadzanie danych 11 . Możliwa jest dynamiczna (lub wyższa statyczna) precyzja, ale zwiększyłaby liczbę bajtów.

Przypadki testowe

$ 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

Jak to działa

Ponieważ pożądana moc wyjściowa wynosi φ n , możemy obliczyć liczbę Fibonacciego F (n) jako ⌊φ n ÷ √5 + 0,5⌋ przy niewielkim dodatkowym wysiłku.

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
źródło
0

Mathematica, 50 bajtów

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

Podstawowe rozwiązanie. Zaokrągla do najbliższej wartości. Wciąż weryfikuję najwyższą wartość, która nie spowoduje braku pamięci w moim komputerze. Wejście 32działa, ale zajmuje 45 minut i zużywa 16 GB pamięci RAM. Jednak biorąc pod uwagę nieskończony czas i pamięć, teoretycznie może to działać dla dowolnej wartości.

LegionMammal978
źródło
1
Czy mógłbyś opublikować wynik? Muszę oszukać i użyć twoich danych wyjściowych, aby dodać kilka ostatnich przypadków testowych. W którą stronę zaokrąglasz? W dół czy do najbliższego? „Nieskończone zasoby” są wystarczająco dobre. Nie wymagam, aby zabrakło ci pamięci!
CJ Dennis