请考虑以下代码:
#include <iostream>
#include <mpreal.h>
using namespace std;
using mpfr::mpreal;
mpreal x("1.001",64);
mpreal y("1.0",64);
y*=x;
cout<<y<<endl; //1
y.set_prec(128);
cout<<y<<endl; //2
输出是
1.001
1.00100000000000000002081668171172168513
我希望第二个输出是类似的
1.00100000000000000000000000000000000000
事实上,我已经知道可以取代
y.set_prec(128);
至
y=mpreal(y.toString(),128);
但这种转换很耗时 .
有没有更好/更快的方法?
谢谢!
1 回答
最好全局设置精度,以便默认情况下将以这种精度创建所有
mpreal
变量 . 在创建任何mpreal
数字之前调用以下函数:其中N是十进制数字所需的精度 .
二进制浮点数不能给出实际的小数精度,它只是实数的近似值 . 表示中的更多位=更高的近似精度 . 但有些数字永远不能用二进制格式表示 . 1.001就是其中之一 . 因此,您将始终从1.001数字的二进制表示中的某个位置开始看到非零 .
有关详细信息,请查看What Every Computer Scientist Should Know About Floating Point Arithmetic .