C - double - Überlauf oder nicht
-
@DirkB sagte in C - double - Überlauf oder nicht:
1.20000E-38 - 3.40000E+38
ah ok
das heißt also
3.30000E+38 + 0.00001E+38 wäre ok
aber meine frage war ja
was passiert bei
bspw.
3.40000E+38 + 0.40000E+38
-
@JamesNguyen sagte in C - double - Überlauf oder nicht:
3.30000E+38 + 0.00001+E+38 wäre ok
Was soll das sein?
-
Nach den maximalen Werten kommt
@DirkB sagte in C - double - Überlauf oder nicht:IEEE 754 kennt übrigens auch +inf und -inf für +/- Unendlich
-
äh ich meinte
3.30000E+38 + 0.00001E+38 = 3.30001E+38
-
@JamesNguyen Versuch es doch selber https://www.h-schmidt.net/FloatConverter/IEEE754de.html
Da kannst du 3.3e38 eingeben und dann bei der Mantisse ein paar Kästchen an/ausschalten (von rechts her)
-
oh man ist das dämlich
also wenn das stimmt dann ist ja
3.3E+38 (wieso steht eig hier bei der mantisse 1.939565658569336 hätte gedacht das ist die zahl vor dem komma)
329999996548271212625250308919809540096
und
die eig größte Zahl ist
3.40282346639e+38
bzw. wieder
340282346638528859811704183484516925440
mit allen Häckchen
wieso stehen im internet dann überhaupt grenzen
wie 3.3E+38 da und ich schau die nach und verwende die dann für vergleiche mit >
und dann stimmt das nicht..
-
@JamesNguyen sagte in C - double - Überlauf oder nicht:
(wieso steht eig hier bei der mantisse 1.939565658569336 hätte gedacht das ist die zahl vor dem komma)
Beachte das Zahlensystem. Die Mantisse ist immer von 1 bis kleiner 2
@JamesNguyen sagte in C - double - Überlauf oder nicht:
wieso stehen im internet dann überhaupt grenzen
wie 3.3E+38 da und ich schau die nach undEs gibt noch andere Darstellungen von Fließkommazahlen.
Und die durften früher auch benutzt werden.verwende die dann für vergleiche mit >
und dann stimmt das nicht..Dafür gibt es die Makros in <float.h> wurde aber auch schon geschrieben)
-
ok kapiert, praktisch holt man sich die max min werte aus den bibliotheken,
da ich das nicht so richtig gelernt haben sollte verzichte ich denke ich auf solche abfragen einfach
ich denke die aufgabe ist nicht im sinne davon zu schauen ob in einem iterationsschritt
möglicherweise bei der berechnung datentypwertegrenzen überschritten werden
Aber grundsätzlich
wenn ich bspw.
eine FUnktion habe
double funktion ( double xN)
return xN + xN ;
wäre es hier sinnvolle
vorher abzufragen und zusagen
if (xN > größte double zahl/2 ) -> mache die berechnung nicht
?
-
@JamesNguyen sagte in C - double - Überlauf oder nicht:
wäre es hier sinnvolle
vorher abzufragen und zusagen
if (xN > größte double zahl/2 ) -> mache die berechnung nicht
?Wenn dein Programm dann nicht mehr richtig läuft: Fehlermeldung und Berechnung abbrechen.
Wie und wo, hängt vom Programm ab.Aber vielleicht reicht auch der Maximale Wert noch aus, damit das Programm funktioniert.
Die Berechnung zu unterschlagen, ist der falsche Weg.
-
ok
bist du dir sicher
das wenn ich gesichtert behaupten kann
xN ist größer als die Hälfte des maximalen double werts
das xN + xN noch einen korrekten wert, d.h. das gewünschte ergebnis der summe liefert?
(wenn der rückgabewert auch vom typ double ist)
kann das überhaupt sein?
-
@JamesNguyen sagte in C - double - Überlauf oder nicht:
xN ist größer als die Hälfte des maximalen double werts
das xN + xN noch einen korrekten wert, d.h. das gewünschte ergebnis der summe liefert?Dann wird das auf inf hinauslaufen.
Was ich meinte ist, dass es von der Anwendung abhängt was dann passiert soll.
-
bedeutet es das man also bei double
den gewünschte effekt wie bei anderen programmiersprachen hat
also das man in dem fall nicht auf überläufe und sowas achten muss
sondern eben inf raus kommt?