GMP problem

gamerfunkie

Erfahrenes Mitglied
Hallo,
ich habe folgendes geschrieben:
Code:
#include "gmp.h"
#include "stdio.h"

// C++ with operator overloading: gmpxx.h[1]
// log, exp, ...        : mpfr.h[2]

void main(){
    mpf_t myMpf_t1,myMpf_t2,myMpf_res;

    mpf_set_default_prec(512);    // minimal precision (in bits)


    mpf_init(myMpf_t1);
    mpf_init(myMpf_t2);
    mpf_init(myMpf_res);

    mpf_set_d(myMpf_t1,1.2345e260);
    mpf_set_d(myMpf_t2,2.3456e300);


    mpf_mul(myMpf_res,myMpf_t1,myMpf_t2);


    printf("Result exceeds double range: %e\n",mpf_get_d(myMpf_res));
    gmp_printf("mpf_t: %.*Fe\n",8,myMpf_res);    // 8 digits


    mpf_clear(myMpf_t1);
    mpf_clear(myMpf_t2);
    mpf_clear(myMpf_res);

}

Jetzt bekomme ich einen Fehler, den ich nicht verstehe:
Code:
--------------------Konfiguration: gmp1 - Win32 Debug--------------------
Kompilierung läuft...
gmp1.cpp
c:\dokumente und einstellungen\user\eigene dateien\programmieren\gmp1\gmp1.cpp(25) : error C2065: 'gmp_printf' : nichtdeklarierter Bezeichner
Fehler beim Ausführen von cl.exe.

gmp1.exe - 1 Fehler, 0 Warnung(en)

Wo liegt der Fehler?
Mfg gamerfunkie
 
gamerfunkie hat gesagt.:
Code:
...
    printf("Result exceeds double range: %e\n",mpf_get_d(myMpf_res));
    gmp_printf("mpf_t: %.*Fe\n",8,myMpf_res);    // 8 digits
...
}
Jetzt bekomme ich einen Fehler, den ich nicht verstehe:
Code:
--------------------Konfiguration: gmp1 - Win32 Debug--------------------
Kompilierung läuft...
gmp1.cpp
c:\dokumente und einstellungen\user\eigene dateien\programmieren\gmp1\gmp1.cpp(25) : error C2065: 'gmp_printf' : nichtdeklarierter Bezeichner
Fehler beim Ausführen von cl.exe.

gmp1.exe - 1 Fehler, 0 Warnung(en)
Scheinbar fehlt von gmp_printf - der Prototyp der Funktion, der zu deinem Aufruf passen würde. Zeig doch mal den Protyp von gmp_printf in deiner gmp.h.
Der Kompiler muß eine Funktion vor ihrer ersten Verwendung (bei dir in main) deklariert bekommen haben, damit er den korrekten Aufruf prüfen kann. Selbige Deklaration hat er nicht gefunden...

greez CF
 
In der Headerdatei existiert die genannte Funktion schon mal gar nicht, du müßtest sie quasi selber schreiben.
Wenn es nur darum geht eine Zahl mit 8 Stellen auszugeben geht das auch mit printf.

Ganzzahl:
printf( "Ganzzahl: %8ld", 1234567890 );

Gleitpunktzahl:
printf( "Zahl: %8.f", 1.234565754635463 );


Schau Dir dazu mal die Format Parameter in der MSDN an oder in der Doku zu printf.

greez CF
 
Hi.

Du verwendest offensichtlich GMP 3.1.1. Die gmp_printf und gmp_scanf Funktionen wurden aber erst in Version 4.0 eingeführt.

Gruß
 
Ich hab die Version 4 gedownloadet. Dort finde ich aber keine inlude und lib Verzeichnisse.

Mit der normalen printf gehts soweit abver jetzt meckert der Linker:
Code:
#include "stdio.h"
#include "gmp.h"

// C++ with operator overloading: gmpxx.h[1]
// log, exp, ...        : mpfr.h[2]

void main(){
    mpf_t myMpf_t1,myMpf_t2,myMpf_res;

    mpf_set_default_prec(512);    // minimal precision (in bits)


    mpf_init(myMpf_t1);
    mpf_init(myMpf_t2);
    mpf_init(myMpf_res);

    mpf_set_d(myMpf_t1,1.2345e260);
    mpf_set_d(myMpf_t2,2.3456e300);


    mpf_mul(myMpf_res,myMpf_t1,myMpf_t2);


    printf("Result exceeds double range: %e\n",mpf_get_d(myMpf_res));
    printf("mpf_t: %.*Fe\n",8,myMpf_res);    // 8 digits

    mpf_clear(myMpf_t1);
    mpf_clear(myMpf_t2);
    mpf_clear(myMpf_res);

}
Fehler:
Code:
--------------------Konfiguration: gmp4 - Win32 Debug--------------------
Linker-Vorgang läuft...
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_clear
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_get_d
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_mul
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_set_d
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_init
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_set_default_prec
Debug/gmp4.exe : fatal error LNK1120: 6 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

gmp4.exe - 7 Fehler, 0 Warnung(en)
 
gamerfunkie hat gesagt.:
Ich hab die Version 4 gedownloadet. Dort finde ich aber keine inlude und lib Verzeichnisse.
Das was du runtergeladen hast ist wahrscheinlich eine Quelldistribution - du müßtest du noch kompilieren und installieren. Hier (http://www.cs.nyu.edu/exact/core/gmp/) gibt's eine Anleitung und aber auch fertige Pakete für Visual C++ zum downloaden.
gamerfunkie hat gesagt.:
Fehler:
Code:
--------------------Konfiguration: gmp4 - Win32 Debug--------------------
Linker-Vorgang läuft...
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_clear
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_get_d
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_mul
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_set_d
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_init
gmp4.obj : error LNK2001: Nichtaufgeloestes externes Symbol ___gmpf_set_default_prec
Debug/gmp4.exe : fatal error LNK1120: 6 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

gmp4.exe - 7 Fehler, 0 Warnung(en)
Naja, das ist ja klar wenn du keine Bibliothek eingebunden hast.

Gruß
 
Zurück