Große Integer (GMP lib)



  • Hallo!

    Für ein projekt benötige ich seeeeeehr große integer zahlen. hab bisschen rumgesucht und dann die GMP lib gefunden.
    aber irgendwie krieg ich's nicht hin das ding zum laufen zu kriegen.
    Ich benutz MSVC++ 6.0 auf WinXP. muss ich dafür erst noch irgendwas kompilieren? ich hab auch schon in den readme files gelesen von der GMPlib aber ich kriegs irgendwie net gebacken 😞

    Wär für jede hilfe dankbar!



  • Hey danke für die hilfe! 👍

    Für alle die das ähnlcihe problem haben -> http://www.cs.nyu.edu/exact/core/gmp/



  • Du schmeißt einfach die *.lib in das "lib"-Verzeichnis von MSVC 6.0 und die *.h in das "include"-Verzeichnis. In deinen Programmen, welche die gmp verwenden sollen gibst du dann unter Projekteinstellungen->Linker->Eingabe->Zusätzliche Abhängigkeiten die .lib's an und includierst den/die header im Source.

    Greetz, Swordfish



  • ja wenn man's von da runterladet was ich in meim letzten post angegeben hab.
    auf der offizillen GMP seite gekommt man zig header und *.c files und weis der teufel wieviel makefiles aber keins funktioniert mit nmake.



  • Ich nutze visual c++ 2000, habe alles wie beschrieben kopiert / eingestellt und komme nicht damit klar...

    dieses kleine programm will ich auf beliebig große zahlen umstellen

    #include "stdafx.h"
    
        using namespace std;
    
    int main (int argc, char *argv[])
    {
    	unsigned long int faktorize, prime=2, solution=0;
    	cout<<"Bitte die in Primfaktoren zu zerlegende zahl eingeben:"<<endl;
    	cin>>faktorize;
    	while(solution==0){
    		if((faktorize%prime)==0){solution=prime;}
    		prime++;
    	}
    	cout<<"1. Primzahl:"<<solution<<endl;
    	cout<<"2. Primzahl:"<<(faktorize/solution)<<endl;
    	return 0;
    }
    

    jetzt hab ich folgendes versucht, nachdem ich mir Assigning-Integers durchgelesen hab: (ach ja: ich hab vorher nen error wegen der libc.lib bekommen ... ich hab einfach wie hier vorgeschlagen, die lib ignorieren lassen)

    #include "stdafx.h"
    
    using namespace std;
    
    void mpz_init (mpz_t faktorize, mpz_t solution, mpz_t prime, mpz_t r);
    //void mpz_mod (mpz_t r, mpz_t faktorize, mpz_t prime);
    //void mpz_set (mpz_t rop, mpz_t op);
    void mpz_set_si (mpz_t rop, signed long int op);
    int main (int argc, char *argv[])
    {
        mpz_t faktorize, prime, solution, r;
        mpz_set(faktorize,2410312426921032588580116606028314112912093247945688951359675039065257391591803200669085024107346049663448766280888004787862416978794958324969612987890774651455213339381625224770782077917681499676845543137387820057597683303280706012438932581187337633431914898423998167651676144654423917749992451544062530082617210605384471605940230305042798096660131146255586264079933020977903380408326503642260167962931947410634244152286818827827000403499805688783516991211156053);
    
    	return 0;
    }
    

    dann hab ich diesen error bekommen:
    fatal error C1064: Compilerlimit: Überlauf des internen Puffers durch Token

    ich dachte, ich kann so große variablen mit gmp benutzen? ich habe allerdings noch so gut wie garkeine erfahrung mit c++ (normalerweise nutze ich php), ich hab mir nur 2 tutorials durchgelesen....



  • @moose mit etwas Nachdenken und Doku lesen wirst du schon dahinter kommen.



  • irgendwie hab ich schon befürchtet dass so ne antwort kommt ....

    ich bin eben nicht darauf gekommen (nach mehreren stunden googeln) und würde mich sehr darüber freuen, wenn du mir einfach sagen würdest was mein fehler ist (ich geh mal davon aus, dass du es weist)

    mit doku meinst du die von http://gmplib.org/, oder?



  • Compilerlimit?!



  • moose schrieb:

    irgendwie hab ich schon befürchtet dass so ne antwort kommt ....

    ich bin eben nicht darauf gekommen (nach mehreren stunden googeln) und würde mich sehr darüber freuen, wenn du mir einfach sagen würdest was mein fehler ist (ich geh mal davon aus, dass du es weist)

    mit doku meinst du die von http://gmplib.org/, oder?

    Also gut, dann will ich mal nicht so sein.

    Die von dir angegebene Zahl ist zu groß. Beliebig große Zahlen kannst du der GMP als Strings/Zeichenketten übergeben.

    Dafür kannst du die Funktion *int mpz_set_str (mpz_t rop, char str, int base) benutzen.



  • danke für die hilfe lolz, das hatte ich auch schon vermutet, allerdings hats dann immer noch nicht geklappt, weil ich die static library genommen hab. als ich die dynamic ausprobiert hab, ging alles wunderbar 😃

    nochmals vielen dank *freu*


Anmelden zum Antworten