C - double - Überlauf oder nicht



  • 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 und

    Es 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?


Log in to reply