其他分享
首页 > 其他分享> > c – 在双精度调用std :: remainder()之后检测到零

c – 在双精度调用std :: remainder()之后检测到零

作者:互联网

我有这个代码:

double a = remainder(92.66, 0.01);
double b = remainder(92.87, 0.01);

事实证明a = -5.33948e-15和b = -2.61423e-15

这里的答案显然为零,​​如果我将这两个数相乘100并得到整数模数.但我希望能够使用双打来做到这一点.问题是,余数返回的数字大于DBL_EPSILON – 那么确定a或b是否为零的正确(最佳近似)方法是什么?

解决方法:

DBL_EPSILON是可以添加到1.0的最小数量.如果您的数字大于1.0,则该数字的epsilon也将按比例增大.只需将DBL_EPSILON乘以该数字即可获得阈值.

double a = remainder(92.66, 0.01);
if (a <= DBL_EPSILON * 92.66)
    a = 0.0;

标签:modulus,c
来源: https://codeday.me/bug/20190830/1770053.html