使用sqrt()时精度下降

时间:2019-08-17 05:49:09

标签: c++ c++11

使用长整数的sqrtl()时精度下降

我需要使用一个变量来存储值,因为我希望用户在0到10 ^ 18的范围内键入自己的值,因此在这种情况下使用long long int是有意义的。 但这是发生错误的地方,我无法正确解决它。

unsigned long long int a = 999999999999999999;
cout << fixed;
cout << (floor(sqrtl(999999999999999999)) == sqrtl(999999999999999999)) << endl;
cout << floor(sqrtl(999999999999999999)) << endl;
cout << (sqrtl(999999999999999999)) << endl;

cout << a << endl;
cout << (floor(sqrtl(a)) == sqrtl(a)) << endl;
cout << floor(sqrtl(a)) << endl;
cout << (sqrtl(a)) << endl;

在我的机器上,输出为

0
999999999.000000
1000000000.000000
999999999999999999
1
1000000000.000000
1000000000.000000

它显示了使用sqrtl(a)与sqrtl(999999999999999999)相比的损失精度

我希望能够在使用变量的同时获取正确的值

0 个答案:

没有答案