frage zu datentypen



  • hallo

    mal ne frage:

    in limits.h stehen die jeweiligen grenzen der daten typen drin!
    z.B.: short max 32767

    aber wenn ich schreibe:

    if(var > SHRT_MAX) ....

    geht das doch gar nicht ! in dem moment, in dem ich die variable 'var' fülle kann sie doch schon übergelaufen sein oder nicht ??

    wie löse ich das problem ?

    ich hab schon dran gedacht, die zahl einfach im nächst größeren datentyp zu buffer, aber dann komm ich ja auch irgendwann an die ober grenze (long double oder so).

    alos wie kann man das lösen ?



  • und wo kommen die daten her, die du in einen short stecken willst?



  • z.B.: aus ner funktion oder so .. aber das ist doch egal oder nicht ???



  • Ne ist nicht egal wenn der Overflow / Underflow erstmal passiert ist kannst du ihn nicht mehr erkennen...



  • wenn die daten aus ner funktion kommen, dann ist es schon zu spaet.

    wenn du mal nen konkreten fall hast, dann kann dir vielleicht geholfen werden.
    ansonsten tu einfach so, als ob es das problem nicht gaebe.



  • nur ne beispiel funktion:

    int add(int a, int b) {
        if((a + b) > INT_MAX) {
             throw std::overflow_error("overflow error");
        }
        return (a + b);
    }
    

    das müsste doch eigendlich gehen oder nicht ?

    tut es aber nicht ... hab probiert und kommt immer was anderes raus ...

    was nun ?



  • int add(int a, int b) {
        if((INT_MAX - a) < b ) {
             throw std::overflow_error("overflow error");
        }
        return (a + b);
    }
    

    Sollte funktionieren
    Kurt



  • ich weiss es nicht schrieb:

    das müsste doch eigendlich gehen oder nicht ?

    Nein. Du rechnest int + int, was wiederum ein int ergibt. Und ein int kann nunmal nicht grösser werden, als INT_MAX.
    Das Problem ist einfach, dass, wie FireFlow schon sagte, sobald ein Over-/Underflow aufgetreten ist, was ja nach der Rechnung von a + b bereits der Fall wäre, du diesen nicht mehr erkennen kannst. Die einzige Möglichkeit die du hast, ist, bereits vor der Rechnung zu prüfen, ob ein Over-/Underflow auftritt. ZuK hat ja bereits ein Beispiel gepostet.


Anmelden zum Antworten