Quadratische Gleichung

Status
Nicht offen für weitere Antworten.

vinkulja6

Mitglied
Hab da ein kleines problem mit einer quadratischen gleichung und irgendwie komm ich da nicht weiter.

Bekomme als Ausgabe immer ein NaN, könnt ihr mir vielleicht helfen den fehler zu finden?

Java:
class SolveQuadratic
{
	public static void main(String[] args)
	{
		double a, b, c;
		double x1, x2;
		
		a = Double.parseDouble(args[0]);
		b = Double.parseDouble(args[1]);
		c = Double.parseDouble(args[2]);
		
		x1 = (- b + (Math.sqrt(Math.pow(b,2) - (4 * a * c)))) / (2 * a);
		x2 = (- b - (Math.sqrt(Math.pow(b,2) - (4 * a * c)))) / (2 * a);
		
		System.out.println(x1);
		System.out.println(x2);
	}
}
 
S

SlaterB

Gast
bitte in doppelter Hinsicht extrem doll merken:

wenn man an der Logik eines einfachen Programms feilt, NIE Eingaben vom Benutzer einlesen oder hier per Programm-Parameter,
1. muss man das unnötig jedes Mal eintippen
2. verliert das Programm und deine Problembeschreibungen hier im Forum stark an Aussagekraft, da unbekannt ist, welche Eingaben du verwendest,

programmiere
Java:
        double a = 4;
        double b = 5;
        double c = 6;
oder was auch immer, dann ist das Thema abgehakt,

mit dem Beispiel kommen bei mir auch NaN, aber das muss ja erstmal nix heißen, suche ein Beispiel, welches auf dem Papier funktioniert
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Die Gleichung muss auch lösbar sein. x²+1 = 0 ist etwa im Reellen nicht lösbar, weil du dann die Wurzel aus einer negativen Zahl ziehen müsstest (was ja letztendlich zu den imaginären und komplexen Zahlen geführt hat).
Ich würde Math.pow(b,2) unbedingt durch b*b ersetzen und vor dem Wurzelziehen prüfen, ob b² - 4ac auch nichtnegativ ist und andernfalls mit einer entsprechenden Meldung abbrechen.
 

vinkulja6

Mitglied
bitte in doppelter Hinsicht extrem doll merken:

wenn man an der Logik eines einfachen Programms feilt, NIE Eingaben vom Benutzer einlesen oder hier per Programm-Parameter,
1. muss man das unnötig jedes Mal eintippen
2. verliert das Programm und deine Problembeschreibungen hier im Forum stark an Aussagekraft, da unbekannt ist, welche Eingaben du verwendest,

programmiere
Java:
        double a = 4;
        double b = 5;
        double c = 6;
oder was auch immer, dann ist das Thema abgehakt,

mit dem Beispiel kommen bei mir auch NaN, aber das muss ja erstmal nix heißen, suche ein Beispiel, welches auf dem Papier funktioniert

die aufgabenstellung ist eben das die zahlen in der komandozeile eingelesen werden

Die Gleichung muss auch lösbar sein. x²+1 = 0 ist etwa im Reellen nicht lösbar, weil du dann die Wurzel aus einer negativen Zahl ziehen müsstest (was ja letztendlich zu den imaginären und komplexen Zahlen geführt hat).
Ich würde Math.pow(b,2) unbedingt durch b*b ersetzen und vor dem Wurzelziehen prüfen, ob b² - 4ac auch nichtnegativ ist und andernfalls mit einer entsprechenden Meldung abbrechen.

danke dir, funkt jetzt
 
S

SlaterB

Gast
die aufgabenstellung ist eben das die zahlen in der komandozeile eingelesen werden
aber die Aufgabenstellung zwingt dich doch nicht, dich selber in der Entwickung zu hemmen, noch das Forum zu ärgern,
erst mit Testdaten arbeiten, später, wenn alles läuft dann die Eingabe

(ist jetzt grundsätzlich gemeint, hat ja anscheinend schon geklappt)
 

vinkulja6

Mitglied
aber die Aufgabenstellung zwingt dich doch nicht, dich selber in der Entwickung zu hemmen, noch das Forum zu ärgern,
erst mit Testdaten arbeiten, später, wenn alles läuft dann die Eingabe

(ist jetzt grundsätzlich gemeint, hat ja anscheinend schon geklappt)

sorry das ich dich geärgert habe bzw das forum. :D

lag an dem math.pow was ich mir eigentlich nicht wirklich erklären kann wieso, weil ich als erstes ohne das math.pow gearbeitet habe.

is ja nun egal, das programm funzt und ich bin happy :D danke an alle die mir geholfen haben
 

Marco13

Top Contributor
die aufgabenstellung ist eben das die zahlen in der komandozeile eingelesen werden

Dazu ein Tipp:
Code:
class Bla
{
    public static void main(String args)
    {
        // Test:
        computeAndPrintResults(4,5,6);

        // Kein Test:
        //doit();
    }

    public static void doit()
    {
        // a,b,c vom user eingeben lassen, dann
        computeAndPrintResults(a,b,c);
    }

    private static void computeAndPrintResults(double a, double b, double c)
    {
        // Rechnen, Ergebnis ausgeben
    }
}

Berechnung und Ausgabe vermischen ist zwar an sich auch nicht schön, aber immerhin besser als Berechnung, Ausgabe UND Eingabe zu vermischen ;)
 

Landei

Top Contributor
lag an dem math.pow was ich mir eigentlich nicht wirklich erklären kann wieso, weil ich als erstes ohne das math.pow gearbeitet habe.

Math.pow arbeitet mit reellen Zahlen. Eine negative Basis ergibt dann wenig Sinn, denn auch wenn (-2)^2 ganz klar 4 ist, ist z.B. (-2)^2.000000000001 schon eine komplexe Zahl. Noch deutlicher wird das bei Wurzeln: (-8)^(1/3) ist -2, aber (-8)^0.3333333333333333 eine komplexe Zahl. Aus diesem Grund verweigert Math.pow bei jeglicher negativen Basis seine Arbeit. Für Quadrate, Kuben und Biquadrate sollte man sowieso lieber "per Hand" multiplizieren, und bei Wurzeln zweiten und vierten Grades lieber Math.sqrt anstatt Math.pow nehmen.
 
S

SlaterB

Gast
> Aus diesem Grund verweigert Math.pow bei jeglicher negativen Basis seine Arbeit.

aber doch nur bei krummen Exponenten?

Java:
public class Test
{
    public static void main(String[] args)
    {
        System.out.println(Math.pow(-2, 2));
        System.out.println(Math.pow(-2, 2.01));
    }
}
->
Code:
4.0
NaN

in diesem Programm mit expliziter Angabe von Exponent 2 scheint mir Math.pow keine Rolle gespielt zu haben
 

Landei

Top Contributor
Uups, da lag ich falsch. Ich habe mir wohl die Javadoc nicht genau genug durchgelesen:
Code:
Returns the value of the first argument raised to the power of the second argument. Special cases:

    * If the second argument is positive or negative zero, then the result is 1.0.
    * If the second argument is 1.0, then the result is the same as the first argument.
    * If the second argument is NaN, then the result is NaN.
    * If the first argument is NaN and the second argument is nonzero, then the result is NaN.
    * If
          o the absolute value of the first argument is greater than 1 and the second argument is positive infinity, or
          o the absolute value of the first argument is less than 1 and the second argument is negative infinity, 
      then the result is positive infinity.
    * If
          o the absolute value of the first argument is greater than 1 and the second argument is negative infinity, or
          o the absolute value of the first argument is less than 1 and the second argument is positive infinity, 
      then the result is positive zero.
    * If the absolute value of the first argument equals 1 and the second argument is infinite, then the result is NaN.
    * If
          o the first argument is positive zero and the second argument is greater than zero, or
          o the first argument is positive infinity and the second argument is less than zero, 
      then the result is positive zero.
    * If
          o the first argument is positive zero and the second argument is less than zero, or
          o the first argument is positive infinity and the second argument is greater than zero, 
      then the result is positive infinity.
    * If
          o the first argument is negative zero and the second argument is greater than zero but not a finite odd integer, or
          o the first argument is negative infinity and the second argument is less than zero but not a finite odd integer, 
      then the result is positive zero.
    * If
          o the first argument is negative zero and the second argument is a positive finite odd integer, or
          o the first argument is negative infinity and the second argument is a negative finite odd integer, 
      then the result is negative zero.
    * If
          o the first argument is negative zero and the second argument is less than zero but not a finite odd integer, or
          o the first argument is negative infinity and the second argument is greater than zero but not a finite odd integer, 
      then the result is positive infinity.
    * If
          o the first argument is negative zero and the second argument is a negative finite odd integer, or
          o the first argument is negative infinity and the second argument is a positive finite odd integer, 
      then the result is negative infinity.
    * If the first argument is finite and less than zero
          o if the second argument is a finite even integer, the result is equal to the result of raising the absolute value of the first argument to the power of the second argument
          o if the second argument is a finite odd integer, the result is equal to the negative of the result of raising the absolute value of the first argument to the power of the second argument
          o if the second argument is finite and not an integer, then the result is NaN. 
    * If both arguments are integers, then the result is exactly equal to the mathematical result of raising the first argument to the power of the second argument if that result can in fact be represented exactly as a double value.
 
G

Gast

Gast
hey leute, bin erstmal als gast hier =) mal schauen wie es mir gefällt, habe gleich mal ein problem, soll fürs studium eine übung machen und zwar ein quadratische gleichung lösen. ich bin soweit gekommen, aber bei der diskriminante komm ich einfach nicht weiter.... würde mich über eine schnelle antwort freuen... mfg KriSiuN
mein programm schaut so aus:

/* QuadGleichung.java */

public class QuadGleichung
{
public static void main(String[] args)
{
int a, b, c;
a = 1;
b = 8; // ax^2 * bx * c = 0
c = 10;

if (a == 0)
{
if (b == 0)
{
if (c == 0)
{
System.out.println("unendliche möglichkeiten");
}
else
{
System.out.println("keine lösung");
}
}
else
{
System.out.println("eine Lösung x = " + (-c / b));
}
}
else
{
float d = F;
System.out.println("Diskriminante" + ((b*b) (-4 * a * c)));
}
}
}
 
G

Gast

Gast
hat unser prof. so gesagt ^^ wir haben halt noch nicht viele befehle ^^programmier erst seit anfang oktober ^^also weiß nicht, kannst du mir irgendwie weiter helfen? wäre super ... komm einfach nicht weiter :D wollte es halt so machen, wiel ich kanns ja aufteilen eine quad. gleichung, mein gedankengang war halt wenn a b und c gleich 0 sind dann ists ja 0, wenn a 0 ist dann hab ich nur eine lineare gleichung... und so weiter.. und am ende will ich die diskriminante mit fallunterscheidung, also wenn D > 0 dann hab ich ja 2 x stellen ... bei D = 0 hab ich ja eine stelle mit x1,x2 und D < 0 hab ich ja keine nullstelle .... so war halt mein gedankengang, vllt hast du ne idee wie ich es anders schreiben kann aber würde es halt gerne verstehen nicht nur hinschreiben :D

vielen dank für deine mühe
 
S

SlaterB

Gast
was ist denn die Frage?
generell an eines der drei Dinge denken:
1. Compilerfehler?
2. Exception zur Laufzeit?
3. falsche Ausgabe?
oder geht gar nix und du suchst nach Ideen?

----

((b*b) [1] (-4 * a * c))

an der Stelle [1] muss irgendwas stehen
 

Leroy42

Top Contributor
Ich würde es so lösen:

Java:
public class QuadGleichung {
  public static void main(String[] args) {
    double a = 1;
    double b = 8;
    double c = 10;
    double d = b*b-4*a*c:
    if (d < 0) {
      System.out.println("Keine Lösung");
    }
    else {
      System.out.println("x1=" + ((-b+Math.sqrt(d) / (2*a)));
      System.out.println("x2=" + ((-b-Math.sqrt(d) / (2*a)));
    }
}
 

Marco13

Top Contributor
Das mit den Fallunterscheidungen ist schon OK. Und wie der letzte Fall behandelt wird, steht ja schon fast in diesem Thread. Schreib' doch mal die Formel als Quellcode hin ...
double x1 = ...
double x2 = ...
 
G

Gast

Gast
boah ihr überfordert mich, bin noch voll der noob im programmieren oO krieg des nicht hin... die befehle die ihr mir reinschreibt sind bestimmt gut, aber ich kenn diese noch nicht :( keine ahnung wie ich des lösen soll ^^
 
G

Gast

Gast
Ich würde es so lösen:

Java:
public class QuadGleichung {
  public static void main(String[] args) {
    double a = 1;
    double b = 8;
    double c = 10;
    double d = b*b-4*a*c:
    if (d < 0) {
      System.out.println("Keine Lösung");
    }
    else {
      System.out.println("x1=" + ((-b+Math.sqrt(d) / (2*a)));
      System.out.println("x2=" + ((-b-Math.sqrt(d) / (2*a)));
    }
}


also ich checks eigentl. schon was du hier machst, aber wieso double? und wieso ein d?? das wenn d <0 ist keine lösung versteh ich auch noch... aber die formel mit x1 = ..... check ich nicht ganz, kann mri das bitte jemand erklären?
 

icarus2

Top Contributor
Das nennt man die allgemeine Lösungsformel einer quadratischen Gleichung.

Wenn du a*x^2 + b*x + c = 0 auflöst, dann erhältst du die beiden Formeln. Wichtig wäre noch, dass die Lösungsformel nur gilt, wenn a != 0 ist.

*Edit:
Ich hab keine Lust die ganze Theorie hier einzutippen, aber vielleicht hilft dir das ein bisschen:
Quadratische Gleichung - Lösungsformel

*Edit 2:
Die Variable d steht für die Diskriminante D. Die Diskriminante besteht aus dem Teil, der sich in der Löungsformel in der Wurzel befindet.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R quadratische Gleichung Java Basics - Anfänger-Themen 23
M Quadratische Gleichung Java Basics - Anfänger-Themen 6
B Quadratische Gleichung mit JAVA lösen Java Basics - Anfänger-Themen 5
S Quadratische Gleichung Java Basics - Anfänger-Themen 5
O Quadratische Gleichung Problem?! Java Basics - Anfänger-Themen 7
G Frage wegen Quadratische Gleichung Java Basics - Anfänger-Themen 9
G quadratische Gleichung lösen Java Basics - Anfänger-Themen 2
N Quadratische Matrix inkl Summe Java Basics - Anfänger-Themen 8
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
K Quadratische Matrix um 90° drehen Java Basics - Anfänger-Themen 5
F Quadratische Gleichungen Java Basics - Anfänger-Themen 6
Screen Kurvendiskussion Quadratische Gleichungen Java Basics - Anfänger-Themen 15
K Datentypen Quadratische Spirale Java Basics - Anfänger-Themen 6
J HILFE! Quadratische funktion programmieren Java Basics - Anfänger-Themen 3
S Quadratische Funktion mit Java primitiv zeichnen. Java Basics - Anfänger-Themen 6
H Quadratische Matrix Java Basics - Anfänger-Themen 8
C Gleichung String Split Java Basics - Anfänger-Themen 6
S Eingabe in einer Gleichung. Java Basics - Anfänger-Themen 14
S Lineare Gleichung lösen Java Basics - Anfänger-Themen 1
C Gleichung mit Potenz mit einer Unbekannten lösen Java Basics - Anfänger-Themen 5
B lineare Gleichung programmieren Java Basics - Anfänger-Themen 2
H Gleichung parsen Java Basics - Anfänger-Themen 10
calzone Problem einer Gleichung mit Modulo Java Basics - Anfänger-Themen 5
F Problem mit quadratischer Gleichung Java Basics - Anfänger-Themen 4
K Lösen einer Gleichung Java Basics - Anfänger-Themen 12
G Zahlen aus Gleichung Java Basics - Anfänger-Themen 4
B Gleichung auslesen und dann damit Rechnen? Java Basics - Anfänger-Themen 4
I gleichung lösen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben