2016-10-16 92 views
0

我想學習如何使用GMP庫用C僅通過寫一個簡單的程序,某些浮點數字加在一起,但在運行時,報告說:如何在C中使用GMP庫分配float值?

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

下面是代碼:

#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); 
} 

我能夠做到這一點只與GMP mpz函數沒有問題,但是當我嘗試這與浮游物我卡住了。該文檔沒有真正顯示任何浮點函數的實例,所以也許我正在初始化或錯誤地賦值。

+1

*始終*在嚴格的標準一致性模式下使用您的編譯器並啓用所有可用的警告。不要發佈堆棧溢出,直到你解決了所有警告。 99%的編程問題可以通過現有工具完全自動診斷。 –

回答

2

the documentation

這是一個好主意,包括gmp.h前stdio.h中,因爲這將允許gmp.h定義原型爲這些功能

這樣你會得到一個錯誤,因爲你調用的參數數量錯誤的函數。你沒有得到任何關於缺少聲明的警告是因爲mpf_out_str是一個宏,在gmp.h中定義,它在你的機器上安裝在/ usr/include中,因此被認爲是系統頭部,所以警告被禁用(使用-Wsystem-headers看到它)。這感覺就像gcc中的一個錯誤...

+0

謝謝,不知何故,我錯過了。 – deltaray

+0

我認爲這是https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68052 –

2

你一定還沒有檢查你的編譯器警告正常,但簡單的錯誤是,我們在調用mpf_out_str數錯誤的參數,你可以查找the documentation

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

我也錯過了這個。現在它的工作。 – deltaray