Eu tenho um programa em C ++ (compilado usando g ++). Estou tentando aplicar dois duplos como operandos à função de módulo, mas recebo o seguinte erro:
error: operandos inválidos dos tipos 'double' e 'double' para o operador binário '%'
Aqui está o código:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@supercat mais detalhes seria incrível. Eu acho que tenho uma idéia do que está nos bastidores para fazer com que o que você diz seja verdade, mas seria bom ver as razões pelas quais o que você diz é verdade; seria interessante ver como funciona nos bastidores (acho que entendo, mas poderia facilmente estar errado).
—
RastaJedi 18/03/16
Os valores de ponto flutuante representam múltiplos inteiros exatos ou frações de potência de dois. Por exemplo, o literal inteiro 0.1 é exatamente 3602879701896397/36028797018963968 (o último valor é uma potência de dois).
—
Supercat
fmod(x,0.1)
dividirá x por essa fração precisa e ficará com o restante, em vez de dividir pelo valor numérico "um décimo".
Possível duplicata: Por que a divisão do módulo (%) funciona apenas com números inteiros?
—
Paul R
fmod
podem causar comportamentos inesperados. Por exemplo,fmod(1, 0.1);
matematicamente deve ser zero, mas na verdade será quase 0,1. A extensão do erro aumenta com a magnitude do quociente. Por exemplo,fmod(9E14, 0.1);
avalia em cerca de 0,05, o que é do ponto de vista matemático completamente errado.