Inspiré par cette vidéo de tecmath .
Une approximation de la racine carrée de n'importe quel nombre x
peut être trouvée en prenant la racine carrée entière s
(c'est-à-dire le plus grand entier tel que s * s ≤ x
), puis en calculant s + (x - s^2) / (2 * s)
. Appelons cette approximation S(x)
. (Remarque: cela équivaut à appliquer une étape de la méthode Newton-Raphson).
Bien que cela ait une bizarrerie, où S (n ^ 2 - 1) sera toujours √ (n ^ 2), mais généralement il sera très précis. Dans certains cas plus importants, cela peut avoir une précision> 99,99%.
Entrée et sortie
Vous prendrez un numéro dans n'importe quel format pratique.
Exemples
Format: entrée -> sortie
2 -> 1.50
5 -> 2.25
15 -> 4.00
19 -> 4.37 // actually 4.37 + 1/200
27 -> 5.20
39 -> 6.25
47 -> 6.91 // actually 6.91 + 1/300
57 -> 7.57 // actually 7.57 + 1/700
2612 -> 51.10 // actually 51.10 + 2/255
643545345 -> 25368.19 // actually 25,368.19 + 250,000,000/45,113,102,859
35235234236 -> 187710.50 // actually 187,710.50 + 500,000,000/77,374,278,481
Caractéristiques
Votre résultat doit être arrondi au moins au centième près (c.-à-d. Si la réponse est 47.2851, vous pouvez produire 47.29)
Votre sortie n'a pas besoin d'avoir des zéros suivants et une virgule décimale si la réponse est un nombre entier (c'est-à-dire que 125,00 peut également être sorti en 125 et 125,0)
Vous n'êtes pas obligé de prendre en charge les nombres inférieurs à 1.
Vous n'avez pas à prendre en charge les entrées non entières. (ie. 1.52 etc ...)
Règles
Les échappatoires standard sont interdites.
C'est un code-golf , donc la réponse la plus courte en octets l'emporte.
la source
s + (x - s^2) / (2 * s) == (x + s^2) / (2 * s)
Réponses:
Gelée ,
87 octets-1 octet grâce à la formule mathématique simplifiée d' Olivier Grégoire - voir leur réponse Java .
Essayez-le en ligne!
Comment?
la source
÷ƽ+ƽH
première fois que j'utilise Jelly, je me trompe peut-être. J'aimerais bien savoir comment stockerƽ
, pour ne pas le répéter. Cela pourrait économiser un autre octet.ƽɓ÷⁹+H
ne recalculerait pas la racine entière, mais c'est aussi 7.ɓ
démarre une nouvelle chaîne dyadique avec des arguments échangés et⁹
fait ensuite référence au bon argument de cette chaîne (c'est-à-dire le résultat deƽ
).ƽɓ÷+⁹H
fonctionnerait ici aussi.Haskell , 34 octets
Essayez-le en ligne!
Explication en pseudocode impératif:
la source
Java (OpenJDK 8) , 32 octets
Essayez-le en ligne!
Explications
Le code est équivalent à ceci:
Les maths derrière:
la source
Python 2 ,
47... 36 octets-3 octets grâce à @JungHwanMin
-1 octet grâce à @HyperNeutrino
-2 octets grâce à @JonathanFrech
-3 octets grâce à @ OlivierGrégoire
Essayez-le en ligne!
la source
s+(x-s*s)/s/2
à(x+s*s)/s/2
+.0
et remplacer/s/2
par/2./s
, en économisant deux octets?MATL ,
129 octetsEssayez-le en ligne!
la source
R,
43 octets29 octetsMerci à @Giuseppe pour la nouvelle équation et aide au golf de 12 octets avec la solution de division entière. En échangeant l'appel de fonction pour l'analyse, j'ai joué à un autre couple d'octets.
Essayez-le en ligne!
la source
f <-
pour affecter la fonction. Mais quand même, bonne solution, assurez-vous de lire les conseils pour jouer au golf en R lorsque vous en aurez l'occasion!APL (Dyalog) ,
2016 octetsEssayez-le en ligne!
la source
JavaScript (ES7), 22 octets
Nous n'avons pas vraiment besoin d'une variable intermédiaire, donc cela peut en fait être réécrit comme:
Cas de test
Afficher l'extrait de code
la source
C, 34 octets
Merci à @Olivier Grégoire!
Fonctionne uniquement avec des
float
entrées.Essayez-le en ligne!
C,
413937 octetsEssayez-le en ligne!
C,
49474543 octetsEssayez-le en ligne!
Merci à @JungHwan Min pour avoir économisé deux octets!
la source
Haskell , 40 octets
Un autre octroie la poussière grâce à H.PWiz.
Essayez-le en ligne!
la source
AWK ,
47 4438 octetsEssayez-le en ligne!
REMARQUE: le TIO like a 2 octets supplémentaires pour
\n
rendre la sortie plus jolie. :)Cela ressemble à tricher un peu pour utiliser sqrt pour trouver la racine carrée, alors voici une version avec quelques octets de plus qui ne le fait pas.
Essayez-le en ligne!
la source
sqrt($1)
vous pouvez utiliser$1^.5
\n
pour obtenir la sortie, le printf dans awk n'a pas besoin de parenthèses et la formule peut être raccourcies/2+$1/s/2
, ce qui se traduit par{s=int($1^.5);printf"%.2f",s/2+$1/s/2}
. Désolé si ce commentaire vous semble grossier.Raquette , 92 octets
Merci à @JungHwan Min pour l'astuce dans la section commentaire
Essayez-le en ligne!
Non golfé
la source
PowerShell , 54 octets
Essayez-le en ligne!ou vérifier certains cas de test
Prend des informations
$x
puis fait exactement ce qui est demandé. La|?
partie trouve l'entier maximal qui, lorsqu'il est au carré, est-l
ess-than-or-e
qual à l'entrée$x
, puis nous effectuons les calculs requis. La sortie est implicite.la source
Coque , 9 octets
Essayez-le en ligne!
Il y a encore quelque chose de laid dans cette réponse, mais je n'arrive pas à trouver une solution plus courte.
Explication
J'implémente une étape de l'algorithme de Newton (qui est en effet équivalent à celui proposé dans cette question)
la source
÷
Pyt ,
1110 octetsExplication
la source
Voie lactée ,
1714 octets-3 octets en utilisant la formule d'Olivier Grégoire
Essayez-le en ligne!
Explication
la source
C # (.NET Core) , 39 octets
Essayez-le en ligne!
Version AC # de la réponse Java d' Olivier Grégoire .
la source