Остаток () не работает в операторе if C ++ - PullRequest
0 голосов
/ 10 января 2019

Приведенный ниже код должен выводить каждое 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 голосов
/ 10 января 2019

Вы работаете с числами с плавающей запятой, которым присуща неточность. 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";
        }
    }
}

Примечание: дальнейшее чтение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...