如何在浮动形式中区分零和非常小的数字

gua*_*hen 5 c floating-point precision

我即将开发一个科学计算器.我的问题是:如何使用浮点数区分零结果和非常小的数字?

例如,对于0.3 - 0.2 - 0.1,结果类似于1E-19,这不是纯零(当然是精度问题).我想打印出结果(0.0).所以我使用EPSILON与零进行比较.

问题是,对于计算:3E-19 - 2E-19,结果应为1E-19.我应该打印出确切的结果(尽管很小)1E-19.但如果我仍然使用EPSILON比较,结果将被强制为零.

所以,我的问题是:我如何检查零和非常小的数字?

Lie*_*yan 5

如果使用二进制浮点数据类型,这本身就不可能.

相反,如果要精确控制数字精度和舍入,则应使用十进制数库,例如GNU Multiprecision(GMP)Boost.Multiprecision.