Нельзя использовать модуль в двойниках?

У меня есть программа на С++ (скомпилирована с использованием g++). Я пытаюсь применить два удвоения в качестве операндов к функции модуля, но я получаю следующую ошибку:

ошибка: недопустимые операнды типов "double" и "double" to binary "operator%"

Здесь код:

int main() {
    double x = 6.3;
    double y = 2;
    double z = x % y;
}

Ответ 1

Оператор % предназначен для целых чисел. Вы ищете функцию fmod().

#include <math.h>

int main() {
    double x = 6.3;
    double y = 2.0;
    double z = fmod(x,y);
    return 0;
}

Ответ 2

fmod(x, y) - это функция, которую вы используете.

Ответ 3

Используйте fmod() из <cmatch>. Если вы не хотите включать файл заголовка C:

double dmod (double x, long long mod)
{
    return static_cast<long long>(x) % mod + x - static_cast<long long>(x);
}

Или более общий подход (T не может быть float или double):

template<typename T, typename U>
constexpr T dmod (T x, U mod)
{
    return static_cast<long long>(x) % mod + x - static_cast<long long>(x);
}