У меня есть программа на C ++ (скомпилирована с использованием g ++). Я пытаюсь применить два двойных в качестве операндов к функции модуля, но я получаю следующую ошибку:
ошибка: недопустимые операнды типов 'double' и 'double' для двоичного оператора '%'
Вот код:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@supercat больше деталей было бы здорово. Я думаю, что есть представление о том, что происходит за кулисами, чтобы заставить то, что вы говорите, быть правдой, но было бы хорошо увидеть причины того, почему то, что вы говорите, является правдой; было бы интересно посмотреть, как это работает за кулисами (думаю, я понимаю, но могу очень легко ошибаться).
—
RastaJedi
Значения с плавающей точкой представляют собой точные целые числа или доли степеней двух. Например, целочисленный литерал 0.1 в точности равен 3602879701896397/36028797018963968 (последнее значение является степенью двойки).
—
суперкат
fmod(x,0.1)
будет делить x на эту точную дробь и брать остаток, а не делить на числовое значение «одна десятая».
Возможный дубликат: Почему деление модуля (%) работает только с целыми числами?
—
Пол Р
fmod
могут вызывать неожиданное поведение. Например,fmod(1, 0.1);
математически должно быть ноль, но на самом деле будет почти 0,1. Степень ошибки возрастает с величиной фактора. Например,fmod(9E14, 0.1);
оценивается примерно до 0,05, что с математической точки зрения просто неправильно.