Как проверить, делится ли число на 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, которая может помочь
- пример можно найти, например, по http://www.cplusplus.com/reference/clibrary/cmath/modf/
Зачем вам знать, является ли число с плавающей точкой делимым на другое?
Арифметика с плавающей точкой не должна использоваться для "точных" вычислений. Результат каждой операции определяется строго, но он отличается от математического значения той же операции. Особенно:
double a = 1e20;
double b = 1e-20;
double c = (a + b) - a;
Вы можете ожидать, что c
будет равен b
, но на самом деле это не так!
Вы должны сравнивать только числа с плавающей точкой с некоторым окном. Означает - лежит ли конкретное значение с плавающей точкой в некотором диапазоне конечной длины.