Hallo Leute, für meine Klasse muss ich eine Quadratwurzel machen, aber es funktioniert nicht !! HELLPP!
Die Herausforderung:
Write a function or program that will "make a number square root".
Hinweis: Dies ist Code-Trolling. Geben Sie eine "nützliche" Antwort, um diesen neuen Programmierer auf seinem Weg zum Programmiererfolg anzuleiten! Seien Sie kreativ!
Antworten:
Java
Wow, das ist ein kompliziertes Problem. Ich habe noch nie eine Quadratwurzel gemacht. Ich habe Quadratwurzeln gezogen, aber noch keine. Vergiss nicht, deinen Code hübsch aussehen zu lassen, um zusätzliche Credits in deinen Klassen zu erhalten. Hier ist der Code, der aus einer eingegebenen Zahl eine Quadratwurzel macht:
Trolle:
System.out.print
s drucken nicht nachjava.lang.System.out.print
. Sie drucken an eine innere Klasse. Die ersten beiden (die Zeichenfolgen drucken sollen) tun nichts; der zweite:100
) ?:0
. Schlägt durch Endlosschleife fehl, wenn der Eingang negativ ist, aus dem gleichen Grund, aus dem es durch Endlosschleife fehlschlägt, wenn der Eingang negativ ist0
.quelle
JFrame.DO_NOTHING_ON_CLOSE
in der Liste der TrollesetAlwaysOnTop(true)
.C ++
Wenn Sie keine bessere Route haben, gibt es immer die Brute-Force-Lösung:
Dies iteriert durch jeden möglichen Wert von a
double
(indemunion
es mit einem Wert vonlong long
der gleichen Bitgröße versehen wird, da es keine gute Möglichkeit gibt, sie unter Verwendung von Doubles als tatsächliche Doubles zu iterieren), bis es einen Wert findet, dessen Quadrat gleich istn
.quelle
double
und along long
ist das Schrecklichste, was ich je gesehen habe.union
ist undefiniertes Verhalten und das Durchlaufen von Doubles ist mit der Funktion möglichstd::nextafter
std::nextafter
es das gab, bevor du es mir gegenüber erwähnt hast, also ja, es wurde gesucht.double
Werte können nicht aus der Multiplikation erzeugt werden ,x*x
wox
istdouble
, auch. Daher gelingt die Suche manchmal (meistens?) Nicht und es wird NaN anstelle eines korrekteren Ergebnisses angezeigt.Python 3
Dieser einfache Code gibt eine genaue Antwort:
quelle
In Python 3 können Sie Folgendes tun:
quelle
Diese Antwort korrigierend ,
Das ist einfach falsch. Jeder weiß, dass der schnellste ASM ist.
Pure x86_64 ASM!
Im Gegensatz zu anderen verzögerten Antworten hat diese eine Komplexität von O (1)!
Und auch im Gegensatz zu anderen Antworten ist dies 101% genau, denn
sqrt(0.5)
es gibt0.70710678118655
!quelle
PCMPEQQ
erscheint Ihnen etwas nicht mehr als "magischer, unlesbarer Müll, der von einem Compiler erzeugt wurde"Python
Wenn es in Ihrer Klasse zulässig ist, können Sie hier eine komplexe Mathematikbibliothek als Hilfsmittel verwenden. Installieren Sie sie, indem Sie den folgenden Befehl ausführen:
Dann würden Sie einfach so etwas wie dieses Python-Skript ausführen:
(Stellen Sie sicher, dass Sie dies mit Administratorrechten ausführen)
quelle
root
in Unixland).C
Offensichtlich ist dies der beste Weg. Es ist so schnell, wie Sie sich vorstellen können, wenn Sie sich den Code ansehen. Verwenden von C, da C am schnellsten ist und dieses Problem eine schnelle Lösung erfordert. Ich habe dies für meine Lieblingszahlen wie 7, 13 und 42 getestet, und es scheint zu funktionieren.
quelle
results[number];
?C
Tricks und Magie machen es möglich.
quelle
Python 3
Ihr macht alles falsch. Jeder kann sehen, dass die Quadratwurzel von 20 nicht 4.47213595499958 oder sogar √20 ist. Diese Lösung verlagert die schwierige Aufgabe der Quadratwurzelberechnung auf das dafür vorgesehene Modul.
Eines dieser Module ist Sympy, das Quadratwurzel-Mathematik liefert. Im Gegensatz zu anderen Lösungen hier macht es eigentlich alles richtig. Es wird sogar angenommen, dass sqrt (-1) I ist - keine der Lösungen hier kann das lösen.
Und hier ist der modulare Code, wie gute Programme aussehen. Die Funktionen sollten so klein wie möglich sein, wenn dies nicht der Fall ist, bedeutet dies, dass Sie schreckliche Programme schreiben. Außerdem sollten Programme viele Kommentare haben.
Und hier ist ein Beispiel dafür, wie dieses Programm funktioniert.
quelle
print_format_prompt_with_thing_to_specify_get_default_prompt_format_to_getattr_get_sys_name_from_get_stdout_name_and_print_square_root_of_read_from_stdin_and_print_get_string_from_get_newline_to_getattr_get_sys_name_from_get_stdout_name
.JavaScript
Leider unterstützt JavaScript das Quadratwurzelsymbol für Funktionsnamen nicht. Stattdessen können wir ein anderes Unicode-Alphabet verwenden, um eine Quadratwurzelfunktion darzustellen.
In diesem Beispiel verwende ich
ᕂ
.Sobald wir ein gültiges Symbol haben, können wir mit dem Math-Objekt eine Quadratwurzelfunktion erzeugen.
Es ist einfach! :)
quelle
Julia
Offensichtlich der beste Weg, dies zu tun, ist die Verwendung der Quadratwurzel Taylor-Serie:
Das gibt eigentlich sehr genaue Werte aus:
Aber natürlich ist es wie eine Annäherung (und auch eine konvergente Reihe) nutzlos für Werte, die nicht nahe bei 1 liegen:
quelle
a^2
(n-mal) dividiere und mit (n-mal) multipliziere, lauteta
die Antwort (sqrt(x)~a^n*sqroot(x/a^2n)
) x-> 0 (wenn a> 0) nicht 1 (gibt große Fehler). Auch wenn x / a ^ 2n ~ 1 ist , ändern sich die Zahlena!=x
undn
werden beliebig geändertx
, um die gewünschte Vorgabe zu erhalten (was nervig und zeitaufwendig macht, um sie zu finden).Latex
Die Lösung dafür ist ziemlich schwierig und sehr komplex. Nehmen Sie also Ihren Kaffee mit. Das Problem ist, dass sich die Quadratwurzel des Codes abhängig von der gewünschten Zahl erheblich ändert. Ich zeige dir das Problem. Sagen wir mal, das
9
ist deine Nummer. Dann würde der Code so aussehen:Nehmen wir nun an, das
1234321
ist Ihre Nummer. Schauen Sie sich den Code an:Last but not least sagen wir, Ihre Nummer ist
0
.Eine gute Möglichkeit, dies zu lösen, besteht darin, ein Programm in
Ook!
oder zu schreibenPiet
, das Ihre Nummer will und das dafür ausgibtLaTeX-sqrt-code
. Hier ist ein sehr einfaches Beispiel dafürOok!
, da es nur ein Byte lesen kann und nicht prüft, ob dieses Byte eine zulässige Zahl ist oder nicht, aber ich denke, Sie kommen auf den Punkt.Gleiches für
Piet
:Dies wäre der effizienteste Weg. Ich würde auch vorschlagen, es zu verwenden,
Piet
da es jedes Mal ein wunderschönes Kunstwerk ist, damit Sachen nicht schnell langweilig werden.quelle
Haskell
Ich habe aufgehört, Computern zu vertrauen, als ich zum ersten Mal von Gleitkommafehlern hörte. Ich meine, im Ernst, wenn selbst Google sie nicht unter Kontrolle bringen kann , wer kann das dann?
Unsere beste Wette ist es also, eine Lösung zu finden, die nur ganze Zahlen enthält. Glücklicherweise ist das einfach, da wir einfach alle Zahlen überprüfen können, da jedes Intervall [1..n] nur eine begrenzte Menge von ihnen enthält, nicht wie der Mist Aleph-1 Real. Hier ist eine Beispielimplementierung in Haskell:
Funktioniert wie ein Zauber, probiere es aus:
Die Genauigkeit sollte für die meisten Anwendungen ausreichen.
quelle
double
s und DDGtriple
s.Java
Der genaueste Weg, dies zu tun, ist die Iteration. Führen Sie zunächst eine Schleife mit
integer
s durch, bis Sie das Ziel überfahren, und wechseln Sie dann zudouble
s. Diese Methode hat den Vorteil, dass sie genau ist , im Gegensatz zu anderen "Schätzmethoden", die Sie möglicherweise sehen. Sie opfern ein bisschen Geschwindigkeit, aber für die meisten Anwendungen ist dies genau das, was Sie brauchen.Sie können diese Antwort ändern, je nachdem, wie genau Sie sein müssen, dies sollte jedoch mindestens milliardstel genau funktionieren:
quelle
0.000000001
ist, dass es zu Rundungsfehlern kommt. Ich habe eine genauere Lösung in C ++ erstellt.Math.nextUp(root)
statt+0.000000001
? Das würde viel länger dauern ... und es wird garantiert gelingen.Double
und war überrascht, als ich sie nicht finden konnte. Ich habe nicht daran gedacht, nachzuschauenMath
, aber das funktioniert ziemlich gut. Ich habe es noch nicht "scheitern" lassen.Javascript
Diese magischen Konstanten können verwendet werden, um die Quadratwurzel einer Zahl mit dem Alphabet zu berechnen:
Tests:
Es scheint ziemlich gut zu funktionieren. Ich frage mich, ob es einen kürzeren Weg gibt.
quelle
JavaScript
Sehr schwieriges Problem!
In JavaScript ist dafür keine Funktion integriert ...
Sieht nach einem Job für den Newton-Raphson-Solver aus.
Jetzt können Sie verwenden
Math.sqrt
quelle
JavaScript / ActionScript
Es gibt keine Möglichkeit, eine Quadratwurzel direkt in ActionScript oder JavaScript zu berechnen, es gibt jedoch eine Problemumgehung. Sie können die Quadratwurzel einer Zahl erhalten, indem Sie sie zur
1/2
Potenz erhöhen .So würde es in JavaScript und ActionScript 2 aussehen:
Und obwohl die Funktion in ActionScript 3 genauso gut funktioniert, würde ich aus Gründen der Klarheit und Zuverlässigkeit die Verwendung typisierter Variablen und Rückgabewerte empfehlen:
Der Troll:
quelle
1/2 == 0
.Python 2.7
Erläuterung
Zitieren
Wikipedia - Quadratwurzel
In der Mathematik ist eine Quadratwurzel einer Zahl a eine Zahl y, so dass y 2 = a ist
Mit anderen Worten ist jede Zahl eine Quadratwurzel einer anderen Zahl.
Hinweis
Diese Frage ähnelt für mich einem bekannten Puzzle. Wie man eine Linie kürzer macht, ohne sie zu reiben oder zu schneiden
quelle
PHP (und andere):
Da die Art und Weise, wie die Frage beschrieben wurde, nicht bedeutete, dass wir sie tatsächlich berechnen müssen, ist hier meine Lösung:
Es bietet eine Möglichkeit, die Quadratwurzel in mehreren Sprachen genau zu berechnen.
Die Liste der Sprachen kann erweitert werden.
Der Wert kann über POST, GET, ein Cookie gesendet oder sogar in der Sitzung gespeichert werden.
Wenn Sie nur die Nummer angeben, wird es verwirrend und gibt das berechnete Ergebnis, das für (fast) JEDE Sprache gültig ist !
quelle
C
Dies ist besser als alle anderen 27 Antworten, da diese alle ungenau sind. Das ist richtig, sie geben nur eine Antwort, wenn es 2 geben sollte. Diese versucht nicht einmal zu antworten, wenn es falsch wird, sie gibt einfach auf und rundet ab.
Code-Trolling:
for
Loop-Missbrauch#define
Verwenden Sie dieseTaste,um die Lesbarkeit zu verringern√1024
zurück3√1024 = ∓32
, was einfach falsch ist)quelle
#define the number
... nett! Mir hat Ihre Argumentation bezüglich der Bedingung für das Anzeigen der Verwendungsnachricht gefallen, insbesondere.C ++
basierend auf http://en.wikipedia.org/wiki/Fast_inverse_square_root und der Antwort von @ snack.
Abgesehen davon, dass ich keine Möglichkeit gefunden habe, x ^ (- 0.5) in x ^ (0.5) umzuwandeln, habe ich den Algorithmus dahingehend modifiziert, dass er direkt ausgeführt wird.
ALGORITHMUS
Wandelt eine Gleitkommazahl (in diesem Fall ein Double) in eine Ganzzahl um (in diesem Fall long long.)
Die ersten paar Bits der Gleitkommazahl sind der Exponent: Das heißt, die Zahl wird als 2 ^ AAA * 1.BBBBBBB gespeichert. Wenn Sie also eine Rechtsverschiebung durchführen, halbiert sich dieser Exponent.
In der ursprünglichen inversen Quadratwurzel, wurde diese Zahl von einer Konstanten abgezogen , um den reziproken zu geben. Ich füge es einfach zur Konstante hinzu, weil ich die Quadratwurzel direkt haben möchte. Der Wert der Konstante wird gewählt, um eine Antwort zu geben, die die beste Annäherung an den gewünschten Wert darstellt.
Wandle die Zahl zurück auf Gleitkomma.
Optional können ein oder zwei Iterationen der Newton-Methode verwendet werden, um das Ergebnis zu verbessern, aber ich habe mich nicht darum gekümmert, weil ich sehen wollte, wie nahe ich dran sein kann.
Die verwendeten Konstanten sehen sehr mysteriös aus, aber über die ersten Ziffern hinaus sind die Werte nicht kritisch. Ich habe die Konstante durch Ausprobieren gefunden. Ich hörte auf, sobald ich einen Wert bekam, der manchmal unterschätzt und manchmal überschätzt wurde.
Ergebnisse
Das Casting ist nur erforderlich, weil Sie mit C keine Bitverschiebungsoperationen auf einem Float ausführen können. Die einzigen echten Operationen sind also die Bitverschiebung und die Addition. Ich habe keine einzige Iteration von Newtons Methode verwendet, um das Ergebnis zu verbessern, daher ist die Präzision bemerkenswert. Der Lehrer des OP wird von der Schnelligkeit der Methode beeindruckt sein, die (ehrlich gesagt) für viele Zwecke genau genug ist!
quelle
10
* 1.000
, sqrt (4) = 2 ^01
* 1.000
= 2, sqrt (2) = 2 ^00
* 1.100
= 1,5. Das1
aus dem Exponenten herausgeschobene Bit ergibt also eine Mantisse von 1,5, was nicht weit vom wahren Wert von sqrt (2) entfernt ist, der etwa 1,4 beträgt. Aber habe keine Ahnung, wie es konsequent Antworten mit einer Genauigkeit besser als 3% gibt.E
Hinweis: Dies funktioniert nur auf meinem Computer, da die zugrunde liegende Hardware Zahlen nicht in Binärform, sondern in der Basis e speichert, sodass das, was als
10
e100
dargestellt wird, e e darstellt und so weiter. Auf diese Weise führt das, was Sie auf einer Binärmaschine als Bitverschiebung nach links bezeichnen, x => e x aus , und das, was Sie auf einer Binärmaschine als Bitverschiebung nach rechts bezeichnen, führt x => ln x aus. Es ist klar, dass es schwierig ist, die zugrunde liegenden Zahlen auf diesem sehr begrenzten, binär zentrierten Internetmedium darzustellen, aber ich gebe mein Bestes.Die Syntax von E ist der von C / C ++ bemerkenswert ähnlich, daher dürfte dies für die meisten Menschen leicht verständlich sein.
quelle
n >> 1
ist das nicht dasselbe wielog(n)
.JavaScript / HTML / CSS
Ich habe darüber nachgedacht, jQuery und ids zu verwenden, um ein bisschen mehr zu trollen, aber ich bevorzuge Vanille-js.
Das Ergebnis ist nicht ganz präzise, aber es funktioniert!
quelle
GeoGebra
Lesen Sie den Wert Ihrer Antwort von der Koordinatenachse ab.
Probieren Sie es hier online aus (erfordert Java) oder genießen Sie einige Screenshots unten:
quelle
100% pure bash (ganzzahlig)
Mit ascii-art Präsentation:
Dieser perfekte Wurzelquadrat muss mit dem
source
Befehl in bash ermittelt werdenAlt (diese Version kann einfach in jedes Konsolenterminal eingefügt werden)
Wird funktionieren wie:
Bitte beachten Sie: Die Wurzel ist quadratisch !!
quelle
Java
Vielen Dank an ggmx für den Code zum Generieren von n Ziffern von pi in Java .
Hatte keine Lust, Input zu implementieren. Um die Codeänderung zu testen
sqrtThis
undexpectedPercision
.So funktioniert der Code. Erstens ist es trivial, die sqrt-Wurzel für Integer zu bekommen, also hatte ich keine Lust, diese zu implementieren, und verwendete stattdessen Java-Dateien, die in sqrt fcn erstellt wurden. Der Rest des Codes ist jedoch zu 100% legitim.
Die Grundidee,
da pi eine unendlich lange, sich nicht wiederholende Dezimalzahl ist, müssen alle Zahlenfolgen darin vorkommen(Lies Bearbeiten). Daher ist deine Antwort in pi !! Als solches können wir einfach eine reguläre Suche auf pi anwenden, um nach Ihrer Antwort zu suchen. Wenn wir keine gute Antwort finden können, verdoppeln wir einfach die Größe des Pi, nach dem wir suchen!Es ist wirklich einfach, man könnte sogar sagen, dass es so einfach ist wie pi :)
Es
wurde nicht nachgewiesen, dass Edit Pi jede Folge endlicher Zahlen enthält. Die Tatsache, dass pi unendlich ist und sich nicht wiederholt, ist kein ausreichender Beweis für eine Aussage, wie sie von Exelian bewiesen wurde. Doch viele Mathematiker tun glauben pi jede Folge von endlichen Zahlen enthält.
quelle
JQuery
Dieser ist der genaueste (Bonus: funktioniert auch für Briefe!)
Hier ist eine Geige
quelle
document.write
, dass es genug widerspricht.C ++
Dadurch erhalten Sie schließlich eine Quadratwurzel.
Ich habe den Code korrigiert, um die Frage besser widerzuspiegeln. Vielen Dank für Ihre Vorschläge. Der Code wurde aktualisiert.
quelle
x+=1e-16
?DBL_EPSILON
.Python
Diese Lösung:
Spoiler:
Code:
quelle
C ++
Ihre Frage wird nicht kompiliert, weil Sie ein! Am Ende. C ++ mag ich nicht!
Hier die richtige Frage für den Compiler:
Oh ... und die Make-Datei.
und 26317.def. Dies sollte bereits in Ihrem Compiler vorhanden sein
Ja, jemand kann -E verwenden, um die richtige Antwort vor dem Prozess auszugeben, aber wenn Sie -E kennen, wissen Sie auch, wie man squareroot. : P Hier einige der vorverarbeiteten. Sehr schlechte minimale Lösung, kein gebundener Scheck, keine Aufforderung. Bis zu diesem Trigraph sind vorverarbeitet.
quelle