Inspiriert von diesem Video von tecmath .
Eine Annäherung an die Quadratwurzel einer beliebigen Zahl x
kann gefunden werden, indem die ganzzahlige Quadratwurzel s
(dh die größte ganze Zahl so s * s ≤ x
) genommen und dann berechnet wird s + (x - s^2) / (2 * s)
. Nennen wir diese Annäherung S(x)
. (Hinweis: Dies entspricht der Anwendung eines Schritts der Newton-Raphson-Methode.)
Dies hat zwar eine Eigenart, wobei S (n ^ 2 - 1) immer √ (n ^ 2) ist, aber im Allgemeinen ist es sehr genau. In einigen größeren Fällen kann dies eine Genauigkeit von> 99,99% haben.
Ein- und Ausgabe
Sie nehmen eine Nummer in einem beliebigen Format.
Beispiele
Format: Eingabe -> Ausgabe
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
Spezifikationen
Ihre Ausgabe muss auf mindestens das nächste Hundertstel gerundet sein (dh wenn die Antwort 47,2851 lautet, können Sie 47,29 ausgeben).
Ihre Ausgabe muss keine folgenden Nullen und keinen Dezimalpunkt haben, wenn die Antwort eine ganze Zahl ist (dh 125,00 können auch als 125 und 125,0 ausgegeben werden).
Sie müssen keine Zahlen unter 1 unterstützen.
Sie müssen keine nicht ganzzahligen Eingaben unterstützen. (dh 1,52 etc ...)
Regeln
Standardlücken sind verboten.
Dies ist ein Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
quelle
s + (x - s^2) / (2 * s) == (x + s^2) / (2 * s)
Antworten:
Gelee ,
87 Bytes-1 Byte dank Olivier Grégoires vereinfachter mathematischer Formel - siehe ihre Java-Antwort .
Probieren Sie es online aus!
Wie?
quelle
÷ƽ+ƽH
Ich habe zum ersten Mal versucht, Jelly zu verwenden, damit ich mich irre. Ich wünschte, ich wüsste, wie man es speichertƽ
, um es nicht zu wiederholen. Das könnte ein weiteres Byte sparen.ƽɓ÷⁹+H
würde die Ganzzahlwurzel nicht neu berechnen, aber es ist auch 7.ɓ
Startet eine neue dyadische Kette mit vertauschten Argumenten und⁹
verweist dann auf das richtige Argument dieser Kette (dh das Ergebnis vonƽ
).ƽɓ÷+⁹H
würde auch hier funktionieren.Haskell , 34 Bytes
Probieren Sie es online aus!
Erklärung im imperativen Pseudocode:
quelle
Java (OpenJDK 8) , 32 Bytes
Probieren Sie es online aus!
Erklärungen
Der Code entspricht diesem:
Die Mathematik dahinter:
quelle
Python 2 ,
47... 36 Bytes-3 Bytes dank @JungHwanMin
-1 Bytes dank @HyperNeutrino
-2 Bytes dank @JonathanFrech
-3 Bytes dank @ OlivierGrégoire
Probieren Sie es online aus!
quelle
s+(x-s*s)/s/2
bis(x+s*s)/s/2
+.0
und ersetzen/s/2
mit/2./s
, spart zwei Bytes?MATL ,
129 BytesProbieren Sie es online aus!
quelle
R,
43 Bytes,29 BytesVielen Dank an @Giuseppe für die neue Gleichung und die Hilfe beim Golfen von 12 Bytes mit der Integer Division-Lösung. Durch Austauschen des Funktionsaufrufs gegen Scannen habe ich noch ein paar Bytes gespielt.
Probieren Sie es online aus!
quelle
f <-
, um die Funktion zuzuweisen. Aber trotzdem, nette Lösung, lesen Sie unbedingt die Tipps zum Golfen in R, wenn Sie die Gelegenheit dazu haben!APL (Dyalog) ,
2016 BytesProbieren Sie es online aus!
quelle
JavaScript (ES7), 22 Byte
Wir brauchen eigentlich keine Zwischenvariable, daher kann diese tatsächlich wie folgt umgeschrieben werden:
Testfälle
Code-Snippet anzeigen
quelle
C 34 Bytes
Vielen Dank an @Olivier Grégoire!
Funktioniert nur mit
float
Eingängen.Probieren Sie es online aus!
C
413937 BytesProbieren Sie es online aus!
C,
49474543 BytesProbieren Sie es online aus!
Vielen Dank an @JungHwan Min für das Speichern von zwei Bytes!
quelle
Haskell , 40 Bytes
Ein anderer bytes den Staub dank H.PWiz.
Probieren Sie es online aus!
quelle
AWK ,
47 4438 BytesProbieren Sie es online aus!
HINWEIS: Das TIO-Like verfügt über 2 zusätzliche Bytes
\n
, um die Ausgabe schöner zu gestalten. :) :)Es fühlt sich an, als würde man ein bisschen schummeln, um mit sqrt die Quadratwurzel zu finden. Hier ist also eine Version mit ein paar weiteren Bytes, die dies nicht tut.
Probieren Sie es online aus!
quelle
sqrt($1)
können Sie verwenden$1^.5
\n
, um die Ausgabe zu erhalten, das printf in awk benötigt keine Klammern und die Formel kann auf gekürzt werdens/2+$1/s/2
, was zu führt{s=int($1^.5);printf"%.2f",s/2+$1/s/2}
. Entschuldigung, wenn dieser Kommentar unhöflich erscheint.Schläger , 92 Bytes
Vielen Dank an @JungHwan Min für den Tipp im Kommentarbereich
Probieren Sie es online aus!
Ungolfed
quelle
PowerShell , 54 Byte
Probieren Sie es online aus! oder Überprüfen Sie einige Testfälle
Nimmt Eingaben auf
$x
und macht dann genau das, was angefordert wird. Der|?
Teil findet die maximale Ganzzahl, die im Quadrat für die Eingabe-l
ess-than-or-e
qual ist,$x
und führt dann die erforderlichen Berechnungen durch. Die Ausgabe ist implizit.quelle
Schale , 9 Bytes
Probieren Sie es online aus!
Diese Antwort enthält immer noch etwas Hässliches, aber ich kann anscheinend keine kürzere Lösung finden.
Erläuterung
Ich implementiere einen Schritt des Newtonschen Algorithmus (der tatsächlich dem in dieser Frage vorgeschlagenen entspricht).
quelle
÷
Pyt ,
1110 BytesErläuterung
quelle
Milchstraße ,
1714 Bytes-3 Bytes nach der Formel von Olivier Grégoire
Probieren Sie es online aus!
Erläuterung
quelle
C # (.NET Core) , 39 Byte
Probieren Sie es online aus!
AC # -Version von Olivier Grégoires Java-Antwort .
quelle