如果语句C ++,remainder()将不起作用

时间:2019-01-10 16:47:10

标签: c++11

下面的代码应输出第10个项(0.0、10.0、20.0等),直到100.0。但是它仅输出“ 0”。有人知道出什么问题吗?

include <iostream>
include <cmath>
using namespace std;

for (double t = 0.0; t < 100.0; t += 0.1)
{
    if (remainder(t, 10.0) == 0)
    {
        cout << t << "\n";
    }
}

1 个答案:

答案 0 :(得分:2)

您正在使用具有固有误差的浮点数。 remainder返回一个浮点值,并且使用==将该值精确检查为0并不总是有效。

您需要使用公差,并查看余数是否在公差范围内:

#include <iostream>
#include <cmath>

int main()
{
    for (double t = 0.0; t <= 100.0; t += 0.1)
    {
        if (std::abs(std::remainder(t, 10.0)) <= 0.001)
        {
            std::cout << t << "\n";
        }
    }
}

注意:further reading