2016-10-16 2 views
0

Ich versuche zu lernen, wie die GMP-Bibliothek in C verwenden, indem nur ein einfaches Programm zu schreiben es beschwert sich einige Gleitkommazahlen zusammen, aber zur Laufzeit hinzuzufügen:Wie man einen Fließkommawert unter Verwendung der GMP-Bibliothek in C zuweist?

GNU MP: Cannot allocate memory (size=140735132293330) 
Aborted (core dumped) 

Hier ist der Code:

#include <gmp.h> 
#include <stdio.h> 

int main(){ 
    mpf_set_default_prec(64); 

    mpf_t sum; 
    mpf_init(sum); 
    mpf_set_ui(sum,0); 
    unsigned int i = 0; 

    while (i < 4) { 
    mpf_add_ui(sum,sum,i); 
    i++; 
    } 

    mpf_out_str(stdout,10,sum); 
    printf ("\n"); 
    mpf_clear(sum); 
} 

Ich konnte dies mit nur den GMP-MPZ-Funktionen ohne Problem tun, aber wenn ich dies mit Floats versuche, stecke ich fest. Die Dokumentation zeigt keine wirklichen Beispiele für Float-Funktionen, daher initialisiere ich die Werte oder weise sie falsch zu.

+1

* Verwenden Sie immer Ihren Compiler im strengen Standardkonformitätsmodus und aktivieren Sie alle verfügbaren Warnungen. Buchen Sie nicht auf Stack Overflow, bis Sie alle Warnungen adressiert haben. 99% der Programmierprobleme können mit vorhandenen Tools vollständig automatisch diagnostiziert werden. –

Antwort

2

Von the documentation,

es ist eine gute Idee stdio.h vor gmp.h aufzunehmen, da diese gmp.h Prototypen zu definieren, für diese Funktionen ermöglichen

Auf diese Weise erhalten Sie einen Fehler, weil Sie die Funktion mit der falschen Anzahl von Argumenten aufrufen. Der Grund dafür, dass Sie wegen der fehlenden Deklaration keine Warnung erhalten, ist, dass mpf_out_str ein Makro ist, das in gmp.h definiert ist und auf Ihrem Computer in/usr/include installiert ist und daher als Systemkopf betrachtet wird -Wsystem-headers um es zu sehen). Dies fühlt sich an wie ein Fehler in gcc ...

+0

Danke, irgendwie habe ich das vermisst. – deltaray

+0

Ich denke, das ist https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68052 –

2

Sie haben müssen Ihre Compiler-Warnungen nicht richtig überprüft, aber der einfache Fehler ist, dass Sie mpf_out_str mit der falschen Anzahl von Argumenten anrufen, die Sie in the documentation nachschlagen können:

size_t mpf_out_str (FILE *stream, int base, size_t n_digits, const mpf_t op) 
//           ^^^^^^^^^^^^^^^^ 
+1

[Demo] (http://melpon.org/wandbox/permlink/kREQwZUn6FOgqqCD) –

+0

Und das habe ich auch vermisst. Jetzt geht es. – deltaray

Verwandte Themen