如何在Qt和C++中获得正确的浮点精度



我正在学习Qt,我发现它真的很神奇,而且有点容易,因为我已经在Microsoft中使用了MFC。

我开发了一个科学的计算器供教育使用。但我面临的是:

我想要像在现实世界中的计算器一样的高精度浮点运算,所以在搜索后我发现了这个函数:

long double ldRes =  std::sqrt(3);
QMessageBox m;
m.settext(QString::number(ldRes, 'g', 30));
m.exec();

输出:

1.73205080756887719317660412344

根据卡西欧计算器的说法,相同操作到相同精度的输出应该是:

1.73205080756887729352744634151

所以很明显,结果是不一样的,所以有人能建议我如何在我的应用程序中使用Qt获得正确的浮点精度吗?或者其他图书馆?

我应该使用GMP MPIR MPFR吗?

谢谢!

当您使用std::sqrt并传递double(好吧,int,它最终将转换为double(时,结果是double

将该结果转换为long double只会获得大量与平方根运算结果无关的低值位!

我不知道你在用什么"其他计算器",但这两种方法之间的差异会导致不同的结果。

std::sqrtllong double一起工作,或者您可以将long double参数传递给std::sqrt,后者会选择正确的重载。

// Effectively equivalent:
long double a = std::sqrtl(3);
long double b = std::sqrtl(3);
long double c = std::sqrt(3.0L);

现在,您的计算从头到尾都具有long double的精度,并且在数学上应该正确到该精度水平。

相关内容

  • 没有找到相关文章

最新更新