mpreal
- числовой тип с плавающей точкой произвольной точности.
Таким образом, mpreal
числа могут иметь гораздо более значимые цифры (даже сотни или тысячные), чем double
. Это означает, что бессмысленно округлять mpreal
до double
до отображения - в этом случае вы потеряете всю первоначальную точность.
В C ++ легко отобразить mpreal
:
/* 100-digits accurate pi */
mpreal pi = mpfr::const_pi(mpfr::digits2bits(100));
/* Show 60-digits of pi */
cout.precision(60);
cout << pi;
Однако вы также можете использовать его с printf
(преобразовав сначала в строку):
/* Display all digits (default formatting) */
printf("pi = %s\n", pi.toString().c_str());
/* Custom format, 60 digits */
printf("pi = %s\n", pi.toString("%.60RNf").c_str());
/* Using native printf from MPFR*/
mpfr_printf("pi = %.60RNf\n", pi.mpfr_srcptr());
Спецификация формата для чисел с множественной точностью такая же, как и для стандарта, за исключением спецификации округления. Вы можете безопасно использовать округление до ближайшего, RN
, как в примерах выше.
Более подробная информация о форматировании mp приведена в Документация MPFR .
(я автор mpreal
класс, он же MPFR C ++ )