int -> Bereichsüberschreitung



  • Gute Idee, ich hätte aber noch sagen müssen, dass in der Testfunktion selbst keine Bereichsüberschreitung auftreten darf.

    Trotzdem danke



  • benq schrieb:

    Gute Idee, ich hätte aber noch sagen müssen, dass in der Testfunktion selbst keine Bereichsüberschreitung auftreten darf.

    warum sollte das stören?



  • ten schrieb:

    probier dies:

    int overflow (int a, int b)
    {
        return (a+b) < a;
    }
    

    müsste bei überlauf 1 ausgeben, sonst 0
    🙂

    Das würde auch nur mit if funktionieren.

    Bsp:

    a = INT_MIN
    b = -1



  • Ich meine natürlich

    a = INT_MIN + 1
    b = -1



  • Das würde beides nicht funzen.
    -> Fehler bei b < 0



  • dann vielleicht so?

    int overflow (int a, int b)
    {
        return (a+b) != ((double)a+b);
    }
    


  • ten schrieb:

    benq schrieb:

    Gute Idee, ich hätte aber noch sagen müssen, dass in der Testfunktion selbst keine Bereichsüberschreitung auftreten darf.

    warum sollte das stören?

    Ich weiß es nicht, aber so wurde mir die Aufgabe gesagt.



  • benq schrieb:

    int GehtDas(int x, int y)
    {
    	if(x>=0) return x<=INT_MAX-y;
    	else return x>=INT_MIN-y;
    }
    

    Geht das auch einfacher (am besten ohne if)

    Vom Ansatz her zwar ok, aber die Umsetzung ist noch fehlerhaft. Der Wert, der von INT_MIN bzw INT_MAX subtrahiert wird, muss logischerweise der sein, der vorher auf grösser oder gleich 0 geprüft wird. Und da die Rechnung kommutativ ist, ist letztendlich egal ob x oder y. Ansonsten denke ich nicht, dass es ohne if geht, da du die Fallunterscheidung für min und max brauchst.



  • benq schrieb:

    ten schrieb:

    benq schrieb:

    Gute Idee, ich hätte aber noch sagen müssen, dass in der Testfunktion selbst keine Bereichsüberschreitung auftreten darf.

    warum sollte das stören?

    Ich weiß es nicht, aber so wurde mir die Aufgabe gesagt.

    dann sag mal dem aufgabensteller, dass vergleiche (grösser/kleiner) eigentlich auch nix anderes sind als subtraktionen, bei der ein überlauf passieren kann (sogar muss)...
    🙂



  • wenn wir schon dabei sind .... gibts irgendwo eine bibo o.ä. im net womit ich eine zahl mit ca 10^3000 zeichen darstellen kann 😛 (ohne rundungsfehler)?

    hab zwar schon selber was zusammengeschrieben aber es ist net besonders schnell damit zu rechnen -.-



  • Die gmp Library würde sich anbieten.

    MfG

    GPC


Anmelden zum Antworten