Le nombre de Dottie est le point fixe de la fonction cosinus, ou la solution de l'équation cos (x) = x . 1
Votre tâche sera de créer un code qui se rapproche de cette constante. Votre code doit représenter une fonction qui prend un entier en entrée et génère un nombre réel. La limite de votre fonction à mesure que l'entrée augmente doit être le nombre Dottie.
Vous pouvez produire une fraction, une décimale ou une représentation algébrique d'un nombre. Votre sortie doit pouvoir être arbitrairement précise, les flottants et les doubles ne sont pas suffisants pour relever ce défi. Si votre langue n'est pas capable de nombres de précision arbitraires, vous devez alors les implémenter ou choisir une nouvelle langue.
Il s'agit d'une question de code-golf donc les réponses seront notées en octets, avec moins d'octets étant mieux.
Conseils
Une façon de calculer la constante consiste à prendre n'importe quel nombre et à lui appliquer à plusieurs reprises le cosinus. Comme le nombre d'applications tend vers l'infini, le résultat tend vers le point fixe du cosinus.
Voici une approximation assez précise du nombre.
0.739085133215161
1: Ici, nous prendrons le cosinus en radians
la source
Decimal
?ÆẠȷ¡
rend compte qu'il n'est pas valide. Essaie Brachylog; oh non Brachylog ne fait même pas de flotteurs.Réponses:
MATL ,
343019 octets11 octets grâce à Sanchises !
Le dernier chiffre décimal dans la sortie peut être désactivé. Cependant, le nombre de chiffres corrects partant de la gauche augmente avec l'entrée et le résultat converge vers la constante réelle.
Essayez-le en ligne!
Explication
Pour l'entrée n et à partir de x = 1, cela applique la fonction
x ↦ cos ( x )
avec n- chiffres arithmétiques à précision variable n fois.
la source
Python 3 , 58 octets
Essayez-le en ligne!
la source
evalf
en M : oPHP , 50 octets
Essayez-le en ligne!
la source
for($a=$argv[1];$a--;)$j=cos($j);echo$j;
(40 octets) est suffisant.GNU bc -l, 30
Le score inclut +1 pour le
-l
drapeau àbc
.La nouvelle ligne finale est importante et nécessaire.
Essayez-le en ligne .
-l
fait 2 choses:c()
pour cos (x)bc
a un calcul de précision arbitraire)Je ne suis pas vraiment clair sur l'exigence de précision. En l'état, ce programme calcule jusqu'à 20 décimales. Si une précision différente est requise, elle
scale=n;
doit être insérée au début du programme, oùn
est le nombre de décimales. Je ne sais pas si je dois ajouter ceci à mon score ou non.Notez également que pour certains nombres de décimales (par exemple 21, mais pas 20), le calcul oscille de chaque côté de la solution dans le dernier chiffre. Ainsi, dans la comparaison des itérations actuelles et précédentes, je divise les deux côtés par 10 (
A
) pour effacer le dernier chiffre.la source
Mathematica, 22 octets
contribution
production
la source
R (+ Rmpfr), 55 octets
Dennis a maintenant ajouté Rmpfr à TIO donc cela fonctionnera; ajouté quelques cas de test.
Explication:
Prend le code que j'ai écrit de ce défi pour évaluer les
cos
n
temps à partir1
, mais d' abord je précise la précision que je veux que les valeurs à être en en créant un objetb
de classempfr
avec la valeur1
et la précisionn
,n>=2
afin que nous obtenons plus de précision que nous avançons.Essayez-le en ligne!
la source
Octave , 42 octets
Essayez-le en ligne!
À peu près un double de ma réponse à Approximate the Plastic Number , mais un peu plus court en raison d'exigences plus détendues.
la source
Mathics or Mathematica, 46 bytes
Try it online!
la source
K: 6 bytes
f/
appliesf
until it reaches a fixed point.la source
Python - 89 bytes
Uses decimal module.
la source
Perl 5, 41 Bytes
Bignum is required for the arbitrary precision. Defines a function f that recursively applies cosine to 0 N times.
TIO doesn't seem to have bignum so no link :(
la source
Mathematica 44 Bytes
FindRoot
uses Newton's method by default.la source
Python 2, 86 bytes
New version using the tip provided.
Python 2, 105 bytes
Uses Newton's method and recursive function to calculate the value.
x
is initial value andn
is the recursion limit.la source
Axiome, 174 octets
non golfé et commenté
résultats:
J'utiliserais la méthode Newton car elle serait plus rapide que la «méthode cos (x) répétée»
où dans la première colonne il y a le nombre de chiffres et dans la deuxième colonne il y a combien la méthode de Newton est plus rapide que d'utiliser la méthode cos (x) répétée, ici. Bonjour
la source