Как проверить, делится ли число на 2 * M_PI в c ++? - PullRequest
0 голосов
/ 30 мая 2011

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

bool делится;реальный ш = 2/3;real t;

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 ]

3 голосов
/ 30 мая 2011

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

2 голосов
/ 30 мая 2011

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

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

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

double c = (a + b) - a;

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

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

2 голосов
/ 30 мая 2011

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

В math.h существует функция с плавающей запятой / двойная модификация, которая может помочь

...