其他分享
首页 > 其他分享> > c fmod为fmod(0.6,0.2)返回0.2

c fmod为fmod(0.6,0.2)返回0.2

作者:互联网

当我在c中使用fmod(0.6,0.2)时返回0.2

我知道这是由浮点精度引起的,但此刻看来我得剩下两倍的余数

非常感谢您为此类问题提供的任何解决方案

解决方法:

数学值0.6和0.2不能精确地用二进制浮点表示.

该演示程序将向您显示发生了什么:

#include <iostream>
#include <iomanip>
#include <cmath>
int main() {
    const double x = 0.6;
    const double y = 0.2;
    std::cout << std::setprecision(60)
              << "x          = " << x << "\n"
              << "y          = " << y << "\n"
              << "fmod(x, y) = " << fmod(x, y) << "\n";
}

我的系统(很可能是您的系统)上的输出是:

x          = 0.59999999999999997779553950749686919152736663818359375
y          = 0.200000000000000011102230246251565404236316680908203125
fmod(x, y) = 0.1999999999999999555910790149937383830547332763671875

给定您传递给它的参数,fmod()返回的结果是正确的.

如果您需要其他结果(我想您期望的是0.0),则必须执行其他操作.有很多可能性.您可以检查结果是否与0.2相差很小,或者可以使用整数算术进行计算(例如,如果要处理的所有数字均为0.1或0.01的倍数).

标签:c,floating-accuracy,fmod
来源: https://codeday.me/bug/20191011/1894299.html