Erste Schritte Loesen von quadratischen Gleichungen

ocsme

Top Contributor
Guten Tag,

ich hab ein kleines Programm geschrieben nur mit if um die Loesungen von quadratischen Gleichungen abzufragen.
Hier mal das Programm:

Java:
int i=0;
final double epsilon=1E-6;
        double a=Double.parseDouble(args[i++]);
        double b=Double.parseDouble(args[i++]);;
        double c=Double.parseDouble(args[i++]);;
        double d=b*b-4*a*c;
       
        if((a==0)&&(b!=0)&&(c!=0))
            System.out.printf("Es existiert eine einzige relle Loesung: x1=%.2f", -c/b);
        else if(a==0&&b==0&&c!=0)
            System.out.println("Kein x erfuellt die Gleichung");
        else if(a==0&&b==0&&c==0)
            System.out.println("Jedes x ist Loesung der Gleichung");
        else if(d>0) {
            d=Math.sqrt(d);
            System.out.printf("Es existieren zwei reelle Loesungen:%n x1 = %.2f%n x2 = %.2f%n%n",
                    (-b+d)/(2*a),(-b-d)/(2*a));
        }
        else if(d<0)
            System.out.printf("Es existieren zwei komplexe Loesungen:%n Realteil: %.2f Imaginaerteil: i*%.2f%n"
            + " Realteil: %.2f Imaginaerteil: i*%.2f%n",
            -b/(2*a),Math.sqrt(c/a-(b/(2*a))*(b/(2*a))),
            -b/(2*a),-(Math.sqrt(c/a-(b/(2*a))*(b/(2*a)))));
        else
            System.out.printf("Es existiert eine doppelte reelle Loesung:%n x1 = x2 = %.2f%n", -b/(2*a));

Klar sicher nicht sehr elegant doch darum geht es jetzt auch nicht sondern meine Frage ist wie Frage ich die double Werte a,b und c auf == 0.0 ab ohne einen Rundungsfehler zu bekommen?
Hatte da eine Epsilon Umgebung gedacht doch da a, b und c ja eingegeben werden soll habe ich damit ein Problem.

Kann mir da jemand einen kleinen Tipp geben?

LG
 

Robat

Top Contributor
Sollte doch irrelevant sein, ob a,b,c eingegeben werden oder nicht. Vielleicht schaust du dir auch mal BigDecimal an.
Java:
if(Math.abs(a - b) < epsilon) {
    // ....     
}
 

ocsme

Top Contributor
o_O stimmt so geht es hab noch einen Wahrheitswert eingebaut damit er auch wirklich abbricht.

So sieht es nun aus!
Java:
final double epsilon=1E-4;
        double a=0.0001;
        double b=.0;
        double c=3;
        double d=b*b-4*a*c;
        boolean error=false;

        if(Math.abs(a-b)<epsilon) {
            System.out.println("Fehler");
            error=true;
        }
          
        if(!error)
        if((a==0)&&(b!=0)&&(c!=0))
            System.out.printf("Es existiert eine einzige relle Loesung: x1=%.2f", -c/b);
        else if(a==0&&b==0&&c!=0)
            System.out.println("Kein x erfuellt die Gleichung");
        else if(a==0&&b==0&&c==0)
            System.out.println("Jedes x ist Loesung der Gleichung");
        else if(d>0) {
            d=Math.sqrt(d);
            System.out.printf("Es existieren zwei reelle Loesungen:%n x1 = %.2f%n x2 = %.2f%n%n",
                    (-b+d)/(2*a),(-b-d)/(2*a));
        }
        else if(d<0)
            System.out.printf("Es existieren zwei komplexe Loesungen:%n Realteil: %.2f Imaginaerteil: i*%.2f%n"
            + " Realteil: %.2f Imaginaerteil: i*%.2f%n",
            -b/(2*a),Math.sqrt(c/a-(b/(2*a))*(b/(2*a))),
            -b/(2*a),-(Math.sqrt(c/a-(b/(2*a))*(b/(2*a)))));
        else
            System.out.printf("Es existiert eine doppelte reelle Loesung:%n x1 = x2 = %.2f%n", -b/(2*a));

mihe7 ja stimmt! Ich dachte man könnte bei Double.parseDouble(args[]) ausdrücke mitgeben doch das geht ja gar nicht zumindest kommt dieser Fehler:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1/3.0"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at Aufgabe05.main(Aufgabe05.java:8)

Dann bräuchte ich das ganze ja gar nicht :D
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben