rechnen mit großen zahlenwerten --> overflow...



  • problem:
    ich muss mit ziemlich großen int-werten rechnen, allerdings bekomme ich zb bei der folgenden operation einen overflow, da das mit int nicht mehr angezeigt werden kann

    int a=5000;
    int b=100000;
    
    int erg=a*b;
    

    ergebnis ist dabei einfach irgendein mist, nicht das was eigentlich rauskommen soll...
    klar, ich könnte das ergebnis als float oder double ausgeben, jedoch ist die ausgabe dann 5e+008 ...
    so kann ich das leider nicht weiterverarbeiten, da ich reine zahlenwerte brauche um diese in der generierung eines codes weiterzuverwenden...

    geht das irgendwie mit int? oder bekomm ich sonst irgendwie die anzeige 500000000 die ich eigentlich brauche??



  • es gibt noch __int64. ist aber kein standard, aber ist zum beispiel bei visual c++ vorhanden.



  • beim GCC (und vermutlich im zukünftigen Standard und in C99) heißt der Typ long long.

    Aber du kannst auch mit double oder zu not long double versuchen die Rechnung durchzuführen.



  • __int64 ist leider auch noch zu klein und bei long long habe ich eine fehlermeldung bekommen, dass das nicht geht...

    double oder float würden gehen, allerdings bekomme ich dann keine kommazahl oder sowas mit e+010 oder so...
    ich brauche reine zahlenwerte! kein komma oder e usw dazwischen, sonst klappt das mit der code-generierung nicht mehr...



  • Dann ist es wohl am besten, daß dir dazu ne eigene Klasse bastelst und den Zahlenwert in einem eigens dafür allokierten Speicher ablegst...



  • Meine Vorschlag waere auch eine eigene Klasse zu basteln.
    Du kannst aber auch ueber printf:

    #include <iostream>
    using namespace std;
    
    int main(){
    double x = 1299999999999934.34545;
    printf("double x = %.0f\n",x);
    }
    

    Einen double ohne Nachkommastellen ausgeben.



  • kingruedi schrieb:

    beim GCC (und vermutlich im zukünftigen Standard und in C99) heißt der Typ long long.

    Beim VC.NET gibt es auch long long.



  • @*moon*

    2e2 ist doch auch ein "normaler" Zahlenwert, steht eben für 2*10**2=200. Das ist aber eben nur ein Problem der Darstellung. Siehe http://userpage.fu-berlin.de/~ram/pub/pub_ciralun/c++_zahlenformatierung_de



  • @Entyl_Sa

    genau das was du mit printf gemacht hast bräuchte ich mit char... ich brauche nachher die double-zahl ohne kommastellen als char...
    wie geht das?

    @kingruedi
    natürlich ist das eine normale zahl, das ist mir klar, allerdings kann ich sie so nicht verwerten, wenn die zahl e usw enthält... ich brauche das ergebnis der rechnung nachher in char und das mit reinen zahlenwerten, dh. 0-9...



  • Hallo
    Wenn du es in C schreibst kannst es du mit printf(" %25.0f",zahl);
    die Feldweite angeben und du hast es als Dezimalzahl angezeigt.

    hubspie


Anmelden zum Antworten