1/0 ergibt keinen Fehler?

Hallo

Kann mir irgendwer erklaeren warum

public static float GesKapazSer(float kapaz1, float kapaz2) {

float ergebnis = 1 / (1/kapaz1 + 1/kapaz2);
return ergebnis;
}

mit 0.0 und 0.0 aufgerufen keinen Fehler liefert sondern 0 zurueck gibt? Vor der Berechnung sind kapaz1 und kapaz2 0.0, das Ergebnis nach der Berechnung ist 0 (nicht 0.0!).

Wenn ich drunter schreib: float ergebnis = 1/ (1/0 + 1/0) liefert er einen Fehler…

Gruss
Fabian

Moin

Kann mir irgendwer erklaeren warum
mit 0.0 und 0.0 aufgerufen keinen Fehler liefert

Das sind float-Zahlen. Integers geben einen Fehler, float-Zahlen ergeben „NaN“ (Not a Number). Wieso das NaN aus der Rechnung wieder rausfällt weiss ich allerdings auch nicht.

cu

Hallo

mit 0.0 und 0.0 aufgerufen keinen Fehler liefert sondern 0
zurueck gibt? Vor der Berechnung sind kapaz1 und kapaz2 0.0,
das Ergebnis nach der Berechnung ist 0 (nicht 0.0!).

1 / (1/0.0 + 1/0.0)

gibt bei mir 0.0

Wenn ich drunter schreib: float ergebnis = 1/ (1/0 + 1/0)
liefert er einen Fehler…

Man kann nicht durch 0 teilen!

„Division durch 0
Wird versucht, eine Zahl x durch 0 zu dividieren, also den Quotienten
x/0 zu berechnen, so ist die Frage ‚‘ 0 × wieviel = x?’’ zu
beantworten. Falls x ¹ 0 ist, hat die Frage überhaupt keine Antwort.
Falls x = 0 ist, ist jede Zahl eine mögliche Antwort. Dies zeigt, daß
die Division durch 0 schlicht und einfach nicht definiert, also eine
mathematisch sinnlose Sache ist.“

http://www.mathe-online.at/mathint/lexikon/d.html

Gruss, Patrick

Man kann nicht durch 0 teilen!

Das ist mir selbstverstaendlich bewusst. Wenn du genau gelesen haettest wuesstest du dass meine eigentliche Frage war warum Java keinen Fehler anzeigt wenn ich genau das mache…

Fabian

Moin

1/0 = Exception (weil das 2 integer Zahlen sind)
1.0/0.0 = NaN (keine Exception, weil das 2 double(float) Zahlen sind)

cu

Man kann nicht durch 0 teilen!

Das ist mir selbstverstaendlich bewusst. Wenn du genau gelesen
haettest wuesstest du dass meine eigentliche Frage war warum
Java keinen Fehler anzeigt wenn ich genau das mache…

Hmm, wenn ich das mache, bekomme ich um die Ohren:

MsgBox „Fatal exception occurred. Program will exit“
und
java.lang.ArithmeticException: / by zero
at DateTest.main(DateTest.java:48)

Gruss, Patrick

Danke euch [owT]
.

Wieso das NaN aus
der Rechnung wieder rausfällt weiss ich allerdings auch nicht.

Vielleicht optimiert der JIT-Compiler den Code dahingegen, daß er mathematische Grenzwertbetrachtungen durchführt?

1/(1/0+1/0) --> 1 / oo + oo = 1 / oo --> 0

Moin

Vielleicht optimiert der JIT-Compiler den Code dahingegen, daß
er mathematische Grenzwertbetrachtungen durchführt?

1/(1/0+1/0) --> 1 / oo + oo = 1 / oo --> 0

Glaub ich eher nicht. Wenn da einer optimiert dann der Compiler. Zur Laufzeit werden die Formel nicht mehr umgestellt. Sonst würde ja:
„java -server Programm.class“ und „java Programm.class“ unterschiedliche Ergebnisse liefern. Der nummerische Teil von java ist bescheiden, aber nicht so schlimm.

cu