• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Quadratwurzel mittels Funktionswert der Quadratfunktion

TimoN11

TimoN11

Mitglied
Hey,
Die Aufgabe lautet:
1611913568682.png


Leider verstehe ich nicht wie man mit der Quadratfunktion die Wurzel herausbekommt.
Zudem verstehe ich auch nicht wie man eine binäre Suche für die Quadratfunktion erstellt -> Werte in ein Array füllen? Aber wie groß muss der x Wert dann sein.
Zudem muss das ganze rekursiv laufen.

Kann eventuell jemand die Aufgabe erklären?
Finde sie einfach zu ungenau formuliert.

Grüße,
 
I

ImmerDieseKinder

Mitglied
Ist auch nicht leicht zu verstehen, aber du kannst es so machen
Java:
    public static double qw2(double qw, double d) {
        // System.out.println(qw + " " + d);
        if (Math.abs(qw * qw - d) < 1.0e-8) {
            return qw;
        }
        return qw2((qw + d / qw) / 2, d);
    }

    public static double qw1(double d) {
        return qw2(d - 1, d);
    }

    public static void main(String[] args) {
        for (int i = 2; i < 101; i++) {
            System.out.println(qw1(i));
        }
    }
 
F

fhoffmann

Top Contributor
Ist auch nicht leicht zu verstehen, aber du kannst es so machen
Das ist aber keine binäre Suche mit Hilfe der Quadrierung.

Die Idee ist folgende:
Um beispielsweise die Wurzel von 8 zu berechnen, probierst du eine Zahl aus, die zu klein ist (z.B. 0), und eine Zahl aus, die zu groß ist (z.B. 10 - welche du hier wählst, musst du dir selber überlegen).
Dann stellst du fest:
0 * 0 = 0 < 8
10 * 10 = 100 > 8
Die Wurzel von 8 muss also zwischen 0 und 10 liegen.
Dann probierst du die Mitte aus, also 5:
5 * 5 = 25 > 8
Die Wurzel von 8 muss also zwischen 0 und 5 liegen.
Dann probierst du die Mitte aus, also 2,5:
2,5 * 2,5 = 6,25 < 8
Die Wurzel von 8 muss also zwischen 2,5 und 5 liegen.
...
 
TimoN11

TimoN11

Mitglied
Das ist aber keine binäre Suche mit Hilfe der Quadrierung.

Die Idee ist folgende:
Um beispielsweise die Wurzel von 8 zu berechnen, probierst du eine Zahl aus, die zu klein ist (z.B. 0), und eine Zahl aus, die zu groß ist (z.B. 10 - welche du hier wählst, musst du dir selber überlegen).
Dann stellst du fest:
0 * 0 = 0 < 8
10 * 10 = 100 > 8
Die Wurzel von 8 muss also zwischen 0 und 10 liegen.
Dann probierst du die Mitte aus, also 5:
5 * 5 = 25 > 8
Die Wurzel von 8 muss also zwischen 0 und 5 liegen.
Dann probierst du die Mitte aus, also 2,5:
2,5 * 2,5 = 6,25 < 8
Die Wurzel von 8 muss also zwischen 2,5 und 5 liegen.
...
Hey, danke hab es jetzt umgesetzt.
Bei Werten wie 9, 18, 64, 25, 101 kriege klappt es wunderbar.
Aber bei Werten wie z.B. 5, 1011 kriege ich ein Stack Overflow.
Kannst du vielleicht über mein Code drüber schauen?


Java:
public class Aufgabe2 {
public static double Quadratwurzel(double a){
if(a < 0) return Double.NaN;
else{
    double anfang = 0;
    return binaereSuche(a,anfang, a);
}
}
public static double binaereSuche(double a, double anfang, double ende){
    if((anfang*anfang) == a || (ende*ende) == a){
        if((anfang*anfang) == a) return anfang;
        else if((ende*ende) == a) return ende;
    }else{
        double mitte = (anfang+ende)/2;
        if(mitte*mitte == a) return mitte;
        else if (mitte*mitte > a) return binaereSuche(a,anfang,mitte);
        else if (mitte*mitte < a) return binaereSuche(a,mitte,ende);
    }
    return 0;
}
 
TimoN11

TimoN11

Mitglied
Gibt es eine Möglichkeit das return 0; am Ende von der binaereSuche Methode wegzulassen? Wenn ich den weglasse spuckt mit der Compiler ein Error raus, obwohl im else Bereich bereits return enthalten sind.
 
F

fhoffmann

Top Contributor
- Beim rechnen mit double können immer kleine Fehler auftreten. Das kann dazu führen, dass die Bedingung anfang*anfang) == a || (ende*ende) == a nie erfüllt ist. Du solltest hier besser abfragen ende - anfang < 0.000001.

- Das return kannst du dir sparen, wenn du nach dem letzen else das if weglässt.
 
Blender3D

Blender3D

Top Contributor
Gibt es eine Möglichkeit das return 0; am Ende von der binaereSuche Methode wegzulassen? Wenn ich den weglasse spuckt mit der Compiler ein Error raus, obwohl im else Bereich bereits return enthalten sind.
Der Code funktioniert so nicht teste einmal die Wurzel aus 2. Das führt zu einem Stackoverflow da sich der Zielwert zu langsam annähert.
Du benötigst eine Rekursionsbeschränkung.
Wurzel Binär:
public class SquareRoot {
    public static void main(String[] args) {
        double[] value = { 0, 2, 1, 1000, 9, 3.141, -1 };
        for (int i = 0; i < value.length; i++)
            System.out.println(
                    (i + 1) + "\t rootOf(" + value[i] + ")\t-> " + sqrt(value[i]) + "\t(" + Math.sqrt(value[i]) + ")");
    }

    public static double sqrt(double value) {
        if (value < 0)
            return Double.NaN;
        return sqrt(value, 0, value, 1000);
    }

    private static double sqrt(double value, double min, double max, int stepLimit) {
        double middle = min + (max - min) / 2;
        double square = middle * middle;
        if (square == value || stepLimit == 0)
            return middle;
        return value > square ? sqrt(value, middle, max, stepLimit - 1) : sqrt(value, min, middle, stepLimit - 1);
    }
}
 
F

fhoffmann

Top Contributor
Bei einer Zahl, die kleiner als 1 ist, ist die Wurzel größer als die Zahl!
Hier funktioniert es also nicht, die Zahl selbst anfangs als "ende" bzw. "max" zu nehmen.
 
I

ImmerDieseKinder

Mitglied
@Blender3D kleiner Tipp:
Java:
    public static double sqrt(double value) {
        if (value < 0) // + value >= Double.MAX_VALUE-1 ...
            return Double.NaN;
        return sqrt(value, -1, value + 1, 1000);
    }

    private static double sqrt(double value, double min, double max, int stepLimit) {
        double mid = (min + max) / 2.0;
        double sqr = mid * mid;
        if (sqr == value || stepLimit == 0)
            return mid;
        return value > sqr ? sqrt(value, mid, max, stepLimit - 1) : sqrt(value, min, mid, stepLimit - 1);
    }

    public static void main(String[] args) {
        for (int i = 0; i < 101; i++) {
            System.out.println(sqrt(i / 10.0));
        }
        System.out.println(sqrt(10_000));
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
TimoN11 Quadratwurzel Genauigkeit Java Basics - Anfänger-Themen 6
M Quadratwurzel berechnen Java Basics - Anfänger-Themen 8
T Methoden Quadratwurzel - Kriterium für genaues Ergebnis Java Basics - Anfänger-Themen 2
B Quadratwurzel nach Heron in rekursiver Darstellung Java Basics - Anfänger-Themen 1
Luk10 Auf Quadratwurzel prüfen Java Basics - Anfänger-Themen 3
C Problem beim Berechnen der Quadratwurzel Java Basics - Anfänger-Themen 3
Khaled-Abo Ziffern unterscheiden mittels einer For-Schleife Java Basics - Anfänger-Themen 6
L Quadratwurzelrechnung mittels Heron-Verfahren Java Basics - Anfänger-Themen 6
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
V Erste Schritte Potenzen b^n mittels Schleife ermitteln Java Basics - Anfänger-Themen 7
S XML mittels HTTP Get Anfrage Java Basics - Anfänger-Themen 4
W Teilstring durch Teilstring mittels StringBuilder ersetzen Java Basics - Anfänger-Themen 7
P Liste mit Lücken mittels Filter aggregieren Java Basics - Anfänger-Themen 7
M Methoden Mittelwert rationaler Zahlen mittels Methode Java Basics - Anfänger-Themen 4
P Klassen In einer Autoklasse das Objekt Auto mittels Collection Speichern Java Basics - Anfänger-Themen 4
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
K Methoden Zahlensysteme umwandeln mittels Rekursion Java Basics - Anfänger-Themen 5
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
L Liste mittels Stack implementieren Java Basics - Anfänger-Themen 0
J OOP GUI-Einstellungen mittels Preferences Java Basics - Anfänger-Themen 0
J ComboBox mittels neuer Methode befüllen Java Basics - Anfänger-Themen 3
A Android-Lib: Sourcecode Generator mittels Annotation Processing Java Basics - Anfänger-Themen 0
W Erste Schritte Exceltabelle in Datenbank übertragen mittels XDEV Java Basics - Anfänger-Themen 7
L Histogram mittels Schleifen und Arrays Java Basics - Anfänger-Themen 9
S Klassen Tiefe Kopie mittels Kopierkonstruktor Java Basics - Anfänger-Themen 6
S Columnindex mittels Columnname herrausfinden Java Basics - Anfänger-Themen 6
M Explorer oeffnen mittels java.awt.Desktop Java Basics - Anfänger-Themen 18
Dogge URL-Ausgabe/Verarbeitungsproblem mittels einer Applikation Java Basics - Anfänger-Themen 2
H Methoden Array aus Punkten erzeugen, mittels Punkt-Klasse Java Basics - Anfänger-Themen 5
S Dateien mittels Path(s) kopieren und umbenennen. Java Basics - Anfänger-Themen 4
C Dynamische (AJAX) Inhalte einer Webseite mittels Java auslesen Java Basics - Anfänger-Themen 2
N Mittels For Schleife Klasse erzeugen Java Basics - Anfänger-Themen 32
B Abfrage mittels Variable vereinfachen Java Basics - Anfänger-Themen 6
D Klassen Zeichnen von Figuren mittels vorgegebener Klasse Java Basics - Anfänger-Themen 3
P Collatz-Folge mittels indirekter Rekursion Java Basics - Anfänger-Themen 8
J Wurzelberechnung (mittels Newton) Java Basics - Anfänger-Themen 14
B Lotto mittels TreeSet Java Basics - Anfänger-Themen 3
C Vererbung "extends" umgehen mittels Objekterzeugung?! Java Basics - Anfänger-Themen 29
A String mittels RegEx filtern Java Basics - Anfänger-Themen 13
U E-Mails mittels Java senden. Java Basics - Anfänger-Themen 2
J Aufruf von Funktionen in *.jar mittels Eclipse Java Basics - Anfänger-Themen 4
E PHP Datei mittels Java aufrufen? Java Basics - Anfänger-Themen 3
P Collections Queue mittels ArrayList Java Basics - Anfänger-Themen 2
F Substring mittels RegEx ermitteln/ersetzen? Java Basics - Anfänger-Themen 2
R 3 Datumsangaben sortieren mittels Switch Java Basics - Anfänger-Themen 9
J Arraylänge mittels "Array.getLength" bestimmen!? Java Basics - Anfänger-Themen 3
I Ascii Bild mittels Scanner einlesen Java Basics - Anfänger-Themen 9
K OOP Datenkapselung mittels private - length Attribut bei Array Java Basics - Anfänger-Themen 3
M Delphi-DLL mittels JNI aufrufen Java Basics - Anfänger-Themen 11
H .jar Consolenprogramm mittels Doppelklick starten Java Basics - Anfänger-Themen 2
S SQL Anweisung mittels PreparedStatement Java Basics - Anfänger-Themen 15
M Additions mittels Rekursion Java Basics - Anfänger-Themen 15
E Array mittels Methode umgekehrt ausgeben Java Basics - Anfänger-Themen 6
Binary.Coder Skalarprodukt mittels long und binärzahlen Java Basics - Anfänger-Themen 5
M Auf Java (Desktop) Applikation mittels Webseite zugreifen Java Basics - Anfänger-Themen 6
W Suche nach strings zwischen eckigen Klammern mittels regulärer Ausdrücke Java Basics - Anfänger-Themen 3
Gonzalez Eingabe des Benutzers mittels readLine()-Methode. Klappt in meinem Beispiel nicht! Java Basics - Anfänger-Themen 7
R JTextField mittels JButton in Konsole ausgeben Java Basics - Anfänger-Themen 2
Z Terminkalender mittels Klassen und Feldern Java Basics - Anfänger-Themen 2
M Benutzer löschen mittels Netbeans Java Basics - Anfänger-Themen 4
I (fremde) IP mittels Applet auslesen Java Basics - Anfänger-Themen 6
G Mittels Runtime prüfen ob ein Programm läuft? Java Basics - Anfänger-Themen 18
M MenuShortcut nur mittels Shift+Taste Java Basics - Anfänger-Themen 3
N einbinden von anderen klassen mittels import Java Basics - Anfänger-Themen 2
M Datei speichern mittels InputStream Java Basics - Anfänger-Themen 13
G Navigations mittels Applet Java Basics - Anfänger-Themen 3
M ArrayList sortieren mittels Comparator Java Basics - Anfänger-Themen 10
C Lösung einer Aufgabe mittels Iteration und Rekursion Java Basics - Anfänger-Themen 12
T Zugriff auf umgebendes Objekt mittels Objekt innerer Klasse Java Basics - Anfänger-Themen 2
K Java-Programm mittels Shell-Skript aufrufen Java Basics - Anfänger-Themen 3
L Vorhandene SVG mittels Batik anzeigen Java Basics - Anfänger-Themen 8
K Datum mittels Thread aktualisieren Java Basics - Anfänger-Themen 6
G mittels Parameter Variable identifizieren Java Basics - Anfänger-Themen 6
T Zeitmesser mittels Threads implementieren Java Basics - Anfänger-Themen 16
V Mittels Java Pfeile erstellen Java Basics - Anfänger-Themen 3
J mehrere JCheckBoxen mittels Schleife abfragen Java Basics - Anfänger-Themen 13
T Erstellen eines Steuerprogramms mittels if-anweisungen Java Basics - Anfänger-Themen 10
R Vector nach Teilzeichenkette durchsuchen (mittels regex) Java Basics - Anfänger-Themen 5
G Mittels RegExp "Variablen" extrahieren Java Basics - Anfänger-Themen 4
T Fernsteuerung mittels Sockets (Architektur okay?) Java Basics - Anfänger-Themen 4
H Subtraktion mittels Negierung auf Addition zurückführen Java Basics - Anfänger-Themen 4
G Objekte mittels Schleife anlegen und ansprechen Java Basics - Anfänger-Themen 8
A Programm mittels Konsole öffnen Java Basics - Anfänger-Themen 12
B Querverweise auf eine Hilfedatei mittels ?Button? Java Basics - Anfänger-Themen 4
E Methodenaufruf mittels variable? kA Java Basics - Anfänger-Themen 5
P Collection Vector speichern mittels Serialisierung? Java Basics - Anfänger-Themen 2
O Funktionswert einer Reihenentwicklung Java Basics - Anfänger-Themen 28

Ähnliche Java Themen

Anzeige

Neue Themen


Oben