С GNU MPFR 4.0.1 :
A floating-point number, or float for short, is an arbitrary precision
significand (also called mantissa) with a **limited** precision exponent.
The C data type for such objects is mpfr_t
....
The precision is the **number of bits used to represent the significand**
of a floating-point number;...
Числа 'mpfr' представлены как float и имеют точность. Вы можете прочитать о точности чисел с плавающей запятой (количество бит в значащем) на wiki .
Каждый mpfr должен быть инициализирован с точностью до пользователя. mpfr_init
инициализированное число с точностью по умолчанию. Из руководства: The default precision is set to 53 bits initially
.
Используйте функцию mpfr_init2
, чтобы установить точность (старайтесь использовать ее всегда). Следующее будет работать как положено, однако вам может не хватить памяти:
int main()
{
mpfr_t x;
mpfr_init2(x, 200);
mpfr_set_str( x, "213598703592091008239502270499962879705109534182641740644", 10, MPFR_RNDN);
mpfr_printf( "%.0RF\n", x );
mpfr_printf( "%.0RNf\n", x );
mpfr_printf( "%.0R*f\n", MPFR_RNDN, x );
return 0;
}