Wurzel ziehen (Ohne Tasch.rech.)
-
scrub schrieb:
mit ner intervallschachtelung
zuerst natürlich vereinfachen: √32=2*√8
Du tust ja so, als wäre das die einzige Möglichkeit. Und das Vereinfachen ist meines Erachtens überflüssig.
Such mal nach dem Heron-Verfahren. Das ist eine superschnelle Iterationsmethode, um Wurzeln zu berechnen. Das Verfahren ist übrigens das gleiche wie das Newton-Verfahren für die Funktion .
-
scrub schrieb:
mit ner intervallschachtelung
zuerst natürlich vereinfachen: √32=2*√8
Warum nicht einfach 4*√2
Wurzel 2 könnte man ja auf ein paar Stellen auswendig wissen.
-
Hi,
auch das Heron-Verfahren ist möglich.
Dabei versucht man das Teil auch immer näher an ein Rechteck anzunähern:double sqrt(double rad, double help, double help2) { if(help2 == rad / ((help + help2)/2)) return help2; return sqrt(rad, help2, rad / ((help + help2) / 2)); } double sqrt(double rad) { return sqrt(rad, 1, rad); }
Das in sqrt sind natürlich nur Beispiels-Anfangswerte für help und help2.
MfG Eisflamme
PS: Der Code sollte leicht verständlich sein, auch wenn er nicht gerade gut ist.
-
== bei doubles? Terminiert das?
-
Doch, das klappt schon.
-
SG1 schrieb:
== bei doubles? Terminiert das?
oft, aber nicht immer. typischerweise entstehen am ende zyklen mit zweierpotenzen als periodenlängen.
ein <= oder >= statt == bei geeignetem startwert behebt das problem bei newton aber zuverlässig, da sich die folge nur von einer seite dem fixpunkt nähert.
-
hm... ich hab ja nicht behauptet, daß das die einzige möglichkeit ist. es ist halt _eine_ von _vielen_ möglichkeiten.
-
volkard schrieb:
da sich die folge nur von einer seite dem fixpunkt nähert.
Ja, bis auf den ersten Wert. Den kann man ja kleiner als die Wurzel wählen. Und als Abbruchskriterium würde ich eine kleine Epsilon-Differenz wählen.
-
Für Kopfrechnen ist das Newton-Verfahren ungeeignet.
Das Verfahren hier ist besser:
http://de.wikipedia.org/wiki/Schriftliches_Wurzelziehen
-
Ah, schön.