使用printf
及其表亲sprintf
和fprintf
显示mpreal
类型变量的值的正确语法是什么?我已经尝试过将天真的 Actor 人数增加一倍:
printf ("... %g ...", (double) var);
仅从g++接收此错误消息:
error: invalid cast from type ‘mpfr::mpreal’ to type ‘double’
我在程序的其他地方使用
double
-type变量没有问题。我听说过
mpreal
类型是此library的一部分,该类型旨在允许使用常规的二进制运算符执行任意精度的算术运算。 最佳答案
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 documentation。
(我是
mpreal
类aka MPFR C++的作者)关于c++ - 如何在mpfr和mpreal中使用printf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9626810/