Tengo un programa en C ++ (compilado usando g ++). Estoy tratando de aplicar dos dobles como operandos a la función de módulo, pero aparece el siguiente error:
error: operandos no válidos de los tipos 'double' y 'double' a binario 'operator%'
Aquí está el código:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@supercat más detalles sería increíble. Creo que tengo una idea de lo que está sucediendo detrás de escena para hacer que lo que dices sea cierto, pero sería bueno ver las razones de por qué lo que dices es cierto; Sería interesante ver cómo funciona detrás de escena (creo que lo entiendo, pero podría estar equivocado muy fácilmente).
—
RastaJedi
Los valores de punto flotante representan múltiplos enteros exactos o fracciones de potencias de dos. Por ejemplo, el entero literal 0.1 es exactamente 3602879701896397/36028797018963968 (el último valor es una potencia de dos).
—
supercat
fmod(x,0.1)
dividirá x entre esa fracción precisa y tomará el resto, en lugar de dividirlo por el valor numérico "una décima".
Posible duplicado: ¿Por qué la división de módulo (%) solo funciona con enteros?
—
Paul R
fmod
pueden causar comportamientos inesperados. Por ejemplo,fmod(1, 0.1);
matemáticamente debería ser cero, pero de hecho será casi 0.1. La extensión del error aumenta con la magnitud del cociente. Por ejemplo, sefmod(9E14, 0.1);
evalúa a aproximadamente 0.05, que es desde un punto de vista matemático simplemente erróneo.