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