Afficher les pouvoirs de Phi avec une précision de Fibonacci


9

Écrivez un code qui prend un seul entier non négatif n et génère la nième puissance de Phi (ϕ, le nombre d'or, environ 1,61803398874989) avec le même nombre de chiffres décimaux que le nième nombre de Fibonacci.

Votre code doit produire la séquence correcte de chiffres pour toutes les entrées jusqu'à au moins 10 (55 chiffres décimaux). La sortie doit être décimale lisible par l'homme. Vous pouvez choisir d'arrondir le dernier chiffre à la valeur la plus proche ou de tronquer la valeur. Veuillez spécifier celui que votre code utilise.

n et sortie, jusqu'à 10, en arrondissant:

 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 et sortie, jusqu'à 10, arrondi à la valeur la plus proche:

 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

Le 7ème nombre de Fibonacci est 13, donc la sortie pour n = 7, ϕ 7 , a 13 décimales. Vous ne devez pas tronquer les zéros de fin qui afficheraient trop peu de chiffres; voir la sortie pour 6 dans le premier tableau, qui se termine par un seul zéro pour maintenir la précision décimale à 8 chiffres.

Peut-être en bonus, dites quel est le nombre le plus élevé que votre programme peut produire correctement.


Qu'en est-il des langues qui ne peuvent pas gérer autant de décimales? J'ai ici une solution Pyth de 24 octets qui ne fonctionne que jusqu'à n = 7, car je ne peux pas afficher plus de 15 décimales. Dois-je quand même le poster?
Denker

@DenkerAffe Bien sûr, vous pouvez le poster mais avec une note disant qu'il n'est pas valide car il ne peut pas faire les trois derniers cas de test. Cela pourrait être une source d'inspiration pour que quelqu'un ajoute de la précision à votre réponse!
CJ Dennis

Réponses:


3

dc, 26 octets

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

En raison de la précision initiale de 99 chiffres après la virgule, cela fonctionnera jusqu'à l'entrée 11 . Une précision dynamique (ou statique plus élevée) est possible, mais augmenterait le nombre d'octets.

Cas de 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

Comment ça fonctionne

Puisque la sortie souhaitée est φ n , nous pouvons calculer le nombre de Fibonacci F (n) comme as n ÷ √5 + 0,5⌋ avec peu d'effort supplémentaire.

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 octets

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

Solution basique. Arrondit à la valeur la plus proche. Toujours en vérifiant la valeur la plus élevée qui ne fera pas manquer de mémoire à mon ordinateur. L'entrée 32fonctionne, mais elle prend 45 minutes et utilise 16 Go de RAM. Cependant, étant donné le temps et la mémoire infinis, cela pourrait théoriquement fonctionner pour n'importe quelle valeur.


1
Souhaitez-vous publier la sortie s'il vous plaît? J'ai besoin de tricher et d'utiliser votre sortie pour ajouter les derniers cas de test. De quelle façon arrondissez-vous? Vers le bas ou au plus proche? «Ressources infinies» est assez bon. Je ne vous demande pas de manquer de mémoire!
CJ Dennis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.