Was passiert wenn eine Zahl zu groß wird?



  • Hi,

    was passiert eigentlich wenn eine Zahl größer wird, als in limits.h
    definiert ist? Wird dann eine Exception geworfen oder wird es einfach ignoriert?

    mfg



  • Lieber Ulk,

    in diesem Fall geschiet ein Über- und ein Unterlauft.

    Grüße,
    Hansi2



  • Hansi2 schrieb:

    Lieber Ulk,

    in diesem Fall geschiet ein Über- und ein Unterlauft.

    Grüße,
    Hansi2

    laut Standard ist das Verhalten undefiniert, dass ein Overflow passiert ist nicht garantiert.



  • Ich habe die Grenzen der IntegerTypen in climits gefunden.
    Gibt es auch eine Datei in der die Grenzen der Fließkommatypen
    definiert sind?



  • ein int z.b. wird einfach negativ



  • <cfloat>

    aber da wir uns ja hier im C++ Subforum befinden, rate ich dir zu

    <limits>
    und std::numeric_limits<T>.

    std::numeric_limits<int>::max()
    

    sollte denselben Werte wie INT_MAX haben und ist zudem schöneres C++.



  • Blue-Tiger schrieb:

    laut Standard ist das Verhalten undefiniert, dass ein Overflow passiert ist nicht garantiert.

    Für unsigned schon.



  • Noch eine Frage. Gibt es einen Compiler oder eine
    Einstellung womit die Grenzen schon zur Compiltime überprüft werden?
    Beispiel:

    unsigned short int Zahl = 100000; // ist definitiv über den Grenzen
    


  • Ulk schrieb:

    Noch eine Frage. Gibt es einen Compiler oder eine
    Einstellung womit die Grenzen schon zur Compiltime überprüft werden?
    Beispiel:

    unsigned short int Zahl = 100000; // ist definitiv über den Grenzen
    

    Naja, der gcc sagt mir dazu:

    warning: large integer implicitly truncated to unsigned type

    Der kriegt das allerdings auch nur bei so einer direkten Zuweisung mit, aber meistens finden der Überlauf ja erst später statt. Sowas hier z.B. kompiliert schon ohne Warnung:

    unsigned short int Zahl = 50000;
    unsigned short int NochNeZahl = Zahl + 50000;
    


  • Bashar schrieb:

    Blue-Tiger schrieb:

    laut Standard ist das Verhalten undefiniert, dass ein Overflow passiert ist nicht garantiert.

    Für unsigned schon.

    bei unsignedtypen gibt es keinen überlauf.


Log in to reply