2015-07-02 72 views
1

我想打印一個指數形式的巨大整數。喜歡的東西以指數函數打印大整數

Value 123456789012 as exp is 1.2345*10^12. 

是否有任何gmp_printf格式來處理這個或者我應該用一些mpz_get_exp函數計算它第一次?

mpz_t integer; 
mpz_t exponent; 
mpf_t top; 

mpz_inits(integer, exponent, null); 
mpf_init(top); 

mpz_set_str(integer, "123456789012", 10); 

??? 

gmp_printf("Value %Zd as exp is %.4Ff*10^%Zd", 
      integer, top, exonent); 

回答

1

%Fe%FE格式說明預計mpf_t類型的對象。因此,您需要爲gmp_printf()創建臨時變量。例如:

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

int main(void) 
{ 
    mpz_t integer; 

    mpz_init_set_str(integer, "123456789012", 10); 
    /* Print integer's value in scientific notation */ 
    { 
     mpf_t tmp_float; 
     mpf_init(tmp_float); 
     mpf_set_z(tmp_float, integer); 
     gmp_printf("%.4FE\n", tmp_float); 
     mpf_clear(tmp_float); 
    } 
    mpz_clear(integer); 
    return 0; 
} 

所得爲:

1.2346E+11 

Alernatively你可以將它通過mpz_get_d普通printf()導出到POD double和打印:

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

int main(void) 
{ 
    mpz_t integer; 

    mpz_init_set_str(integer, "123456789012", 10); 
    printf("%.4E\n", mpz_get_d(integer)); 

    mpz_clear(integer); 
    return 0; 
} 

我會preffer第二種方法是它看起來更乾淨。

1

gmplib文件似乎表明%e%E printf的選項應該只是罰款。這些以科學記數法打印。

gmp_printf("%e", integer);