Mostra i poteri di Phi con precisione Fibonacci


9

Scrivere del codice che accetta un solo numero intero non negativo n ed emette l' ennesima potenza di Phi (φ, il rapporto dorato, circa 1,61803398874989) con lo stesso numero di cifre decimali come l' n-esimo numero di Fibonacci.

Il codice deve produrre la sequenza corretta di cifre per tutti gli input fino ad almeno 10 (55 cifre decimali). L'output deve essere decimale leggibile dall'uomo. È possibile scegliere se arrotondare l'ultima cifra al valore più vicino o troncare il valore. Specifica quale utilizza il tuo codice.

n e output, fino a 10, arrotondando per difetto:

 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 e output, fino a 10, arrotondando al valore più vicino:

 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

Il 7 ° numero di Fibonacci è 13, quindi l'uscita per n = 7, ϕ 7 , ha 13 cifre decimali. Non è necessario troncare gli zeri finali che visualizzerebbero troppe cifre; vedere l'output per 6 nella prima tabella, che termina con un singolo zero per mantenere la precisione decimale a 8 cifre.

Forse come bonus, dì qual è il numero più alto che il tuo programma può produrre correttamente.


Che dire delle lingue che non sono in grado di gestire così tanti decimali? Ho qui una soluzione Pyth a 24 byte che funziona solo fino a n = 7, poiché non riesco a visualizzare più di 15 cifre decimali. Devo pubblicarlo comunque?
Denker,

@DenkerAffe Certo, puoi pubblicarlo ma con una nota che dice che non è valido perché non può fare gli ultimi tre casi di test. Potrebbe essere d'ispirazione per qualcuno aggiungere precisione alla tua risposta!
CJ Dennis,

Risposte:


3

dc, 26 byte

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

A causa della precisione iniziale di 99 cifre dopo la virgola, questo funzionerà con l'input 11 . Una precisione dinamica (o superiore statica) è possibile, ma eleverebbe il conteggio dei byte.

Casi test

$ 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

Come funziona

Poiché l'uscita desiderata è φ n , possiamo calcolare il numero di Fibonacci F (n) come ⌊φ n ÷ √5 + 0,5⌋ con un piccolo sforzo aggiuntivo.

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 byte

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

Soluzione di base. Arrotonda al valore più vicino. Sto ancora verificando il valore più alto che non farà esaurire la memoria del mio computer. L'input 32funziona, ma richiede 45 minuti e utilizza 16GiB di RAM. Tuttavia, dato il tempo e la memoria infiniti, ciò potrebbe teoricamente funzionare per qualsiasi valore.


1
Pubblicheresti l'output per favore? Devo imbrogliare e utilizzare il tuo output per aggiungere gli ultimi casi di test. In che modo stai arrotondando? Giù o al più vicino? Le "risorse infinite" sono abbastanza buone. Non ti chiedo di rimanere senza memoria!
CJ Dennis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.