Zeigen Sie die Kräfte von Phi mit Fibonacci-Präzision an

9

Schreiben Sie einen Code, der eine einzelne nicht negative ganze Zahl n verwendet und die n-te Potenz von Phi (ϕ, Goldener Schnitt, ungefähr 1,61803398874989) mit der gleichen Anzahl von Dezimalstellen wie die n-te Fibonacci-Zahl ausgibt .

Ihr Code muss für alle Eingaben bis zu mindestens 10 (55 Dezimalstellen) die richtige Ziffernfolge erzeugen. Die Ausgabe muss für Menschen lesbar sein. Sie können wählen, ob die letzte Ziffer auf den nächsten Wert gerundet oder der Wert abgeschnitten werden soll. Bitte geben Sie an, welchen Code Sie verwenden.

n und Ausgabe bis 10, abgerundet:

 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 und Ausgabe bis 10, auf den nächsten Wert gerundet:

 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

Die 7. Fibonacci-Zahl ist 13, daher hat die Ausgabe für n = 7, ϕ 7 , 13 Dezimalstellen. Sie dürfen nachgestellte Nullen nicht abschneiden, die zu wenige Ziffern anzeigen würden. Siehe Ausgabe für 6 in der ersten Tabelle, die mit einer einzelnen Null endet, um die Dezimalgenauigkeit bei 8 Stellen zu halten.

Sagen Sie vielleicht als Bonus, welche höchste Zahl Ihr Programm korrekt ausgeben kann.

CJ Dennis
quelle
Was ist mit Sprachen, die nicht mit so vielen Dezimalstellen umgehen können? Ich habe hier eine 24-Byte-Pyth-Lösung, die nur bis n = 7 funktioniert, da ich nicht mehr als 15 Dezimalstellen anzeigen kann. Soll ich es trotzdem posten?
Denker
@DenkerAffe Sicher, Sie können es posten, aber mit einem Hinweis, dass es nicht gültig ist, weil es die letzten drei Testfälle nicht ausführen kann. Es könnte eine Inspiration für jemanden sein, Ihre Antwort präziser zu gestalten!
CJ Dennis

Antworten:

3

Gleichstrom, 26 Bytes

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

Aufgrund der anfänglichen Genauigkeit von 99 Stellen nach dem Komma funktioniert dies bei Eingabe 11 . Eine dynamische (oder höhere statische) Genauigkeit ist möglich, würde jedoch die Anzahl der Bytes erhöhen.

Testfälle

$ 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

Wie es funktioniert

Da die gewünschte Ausgabe φ n ist , können wir die Fibonacci-Zahl F (n) mit geringem zusätzlichen Aufwand als ⌊φ n ÷ √5 + 0,5⌋ berechnen .

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
quelle
0

Mathematica, 50 Bytes

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

Grundlösung. Runden auf den nächsten Wert. Überprüfen Sie immer noch den höchsten Wert, der nicht dazu führt, dass meinem Computer der Speicher ausgeht. Die Eingabe 32funktioniert, dauert jedoch 45 Minuten und verwendet 16 GB RAM. Bei unendlicher Zeit und Speicher kann dies jedoch theoretisch für jeden Wert ausgeführt werden.

LegionMammal978
quelle
1
Würden Sie die Ausgabe bitte posten? Ich muss betrügen und Ihre Ausgabe verwenden, um die letzten Testfälle hinzuzufügen. Welchen Weg runden Sie? Runter oder zum nächsten? "Unendliche Ressourcen" ist gut genug. Ich brauche nicht, dass dir der Speicher ausgeht!
CJ Dennis