Как вы можете на законных основаниях выполнить оператор мод на закругленной двойной?

Я пытаюсь реализовать оператор mod на двойное число, которое временно преобразуется в целое число (округлено), но компилятор (clang), похоже, не так и возвращает ошибку: assignment to cast is illegal, lvalue casts are not supported,
Например, в этом фрагменте

double a;
int b;
(int)a %= b;

Есть ли способ обойти это ограничение?

0

Решение

То, что вы делаете, незаконно. поговорка (int)a = ... незаконно, потому что вы не можете разыграть a в целое число таким образом. Вы должны разыграть его справа от задания.

Если вы действительно хотите сделать это, вы можете сказать:

double a;
int b;
a = (double)((int)a % b); /* Casting to a double at this point is useless, but because a is a double-type, the result of the modulus it will be implicitly casted to a double if you leave out the explicit cast. */

Я бы посоветовал присваивать результат модуля новой переменной int, но это ваш выбор.


редактироватьВот пример этого: http://ideone.com/tidngT

Кроме того, стоит отметить, что приведение двойного числа к целому не округляет его, а просто усекает его. И, если значение вашего двойника выше, чем диапазон intтогда это может привести к неопределенному поведению.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]