Sergey
Sergey

Reputation: 15

Writing number with a lot of digits into file using MPIR

I'm using MPIR/Ubuntu 14.04.

I have big integer that have a lot of digits, like 2^1920, and don't know how to write it into file *.txt

FILE *result; 

result=fopen("Number.txt","a+");

gmp_fprintf(result,"%d",xyz);

fclose(result);

didn't work.

Are there some other options I can use?

Upvotes: 1

Views: 318

Answers (1)

Grzegorz Szpetkowski
Grzegorz Szpetkowski

Reputation: 37954

The gmp_printf() function (thus subsequently gmp_fprintf() as well) requires special format specifier for mpz_t object (which I guess xyz is). You should use %Zd instead of plain %d, that does not work. To be pedantic it's undefined behavior to use inadequate f.s. in C.

If you don't need "full-featured" formatted output, then you might also take a look at mpz_out_str(), that allows to specify base (like 2 or 10):

size_t mpz_out_str (FILE *stream, int base, const mpz_t op)

Alternatively you might use mpz_out_raw() function that just "dumps" the whole number as it is stored in binary format:

size_t mpz_out_raw (FILE *stream, const mpz_t op)

Output op on stdio stream stream, in raw binary format. The integer is written in a portable format, with 4 bytes of size information, and that many bytes of limbs. Both the size and the limbs are written in decreasing significance order (i.e., in big-endian).

Upvotes: 2

Related Questions