C - double - Überlauf oder nicht
- 
					
					
					
					
 das versteh ich nicht mit den 16 stellen (sind das jetzt 16 oder 15?) ich habe doch den Wertebereich. wieso kann ich bei 1e18 schon nicht mehr rechnen? und was heißt nicht mehr berücksichtig? Überlauf? oder der Wert ändert sich nicht? 
 
- 
					
					
					
					
 @JamesNguyen Wenn du 1e18 ausschreibst, hast du eine Zahl mit 19 Stellen. Das +1 würde die 19. Stelle verändern, die aber gar nicht mehr berücksichtigt wird. Bei einer Addition/Subtraktion werden die Zahlen auf denselben Exponenten (den größeren) gebracht. 
 
- 
					
					
					
					
 ich versteh irgendwie gar nix mehr reden wir jetzt von long double, weil du von 19 stellen redest? den letzten Satz habe ich nicht verstanden. 
 
- 
					
					
					
					
 @JamesNguyen 
 Nehmen wir malfloat(ist wiedoublemit weniger Stellen)
 1E9 + 11’000‘000‘000 +0‘000’000‘001 ————————————— =1‘000’000‘001 1 234 567 8 Stelledie Einer-1 fällt aus den signifikanten Stellen raus, kann also im Ergebnis nicht berücksichtigt werden 
 
- 
					
					
					
					
 ok aber ich habe für den Wertebereich float gedacht Wertebereich 1.2E-38 - 3.4E+38 und 6 stellen Genauigkeit ? 
 
- 
					
					
					
					
 @JamesNguyen sagte in C - double - Überlauf oder nicht: ok aber ich habe für den Wertebereich float gedacht Wertebereich 1.20000E-38 - 3.40000E+38 Es geht um die Stellen vor dem E. Das sind die signifikanten Stellen. 
 
- 
					
					
					
					
 @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?