Как проверить, делится ли число на 2*M_PI в C++?

Это то, что я сделал для проверки делимости числа на 2*M_PI. "w" - это константа, равная 2/3, а t - это переменная, которая изменяется на t += dt, где dt равно 0,1. Я пытаюсь использовать оператор мод%, чтобы увидеть, делится ли что-то. Но это не работает.

делится на бул; реальный ш = 2/3; реальный т;

if((w*t) % 2*M_PI == 0)
    {
        divisible = true;
    }

else
    {
        divisible = false;
    }

Это ошибка, которую я получаю, "недопустимые операнды типов 'real' и 'int' для двоичного оператора '%'"

Что это значит? Как мне заставить это работать? Так что мне нужно сделать w и t int? Их не может быть, потому что w равно 2/3, а t увеличивается с 0 на 0,1. Может кто-нибудь, пожалуйста, помогите мне?

3 ответа

Решение

Использование std::fmod вместо этого он работает на двойных, а не на % оператор.

"%" - это целочисленный оператор по модулю, который не работает для аргументов с плавающей запятой / двойных аргументов / операндов

В math.h существует функция float / double modf, которая может помочь

Зачем вам знать, является ли число с плавающей точкой делимым на другое?

Арифметика с плавающей точкой не должна использоваться для "точных" вычислений. Результат каждой операции определяется строго, но он отличается от математического значения той же операции. Особенно:

double a = 1e20;
double b = 1e-20;

double c = (a + b) - a;

Вы можете ожидать, что c будет равен b, но на самом деле это не так!

Вы должны сравнивать только числа с плавающей точкой с некоторым окном. Означает - лежит ли конкретное значение с плавающей точкой в ​​некотором диапазоне конечной длины.

Другие вопросы по тегам