J'ai un programme en C++ (compilé en utilisant g ++). J'essaie d'appliquer deux doubles comme opérandes à la fonction de module, mais je reçois l'erreur suivante:Vous ne pouvez pas utiliser le module sur les doubles?
error: invalid operands of types 'double' and 'double' to binary 'operator%'
Voici le code:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
Comme il a été noté, fmod() fournit la fonction nécessaire. Comme cela n'a pas encore été noté, il est important de réaliser que les erreurs d'arrondi dans le second opérande de 'fmod' peuvent provoquer des comportements inattendus. Par exemple, 'fmod (1, 0.1);' devrait mathématiquement être zéro, mais sera en fait proche de 0.1. L'ampleur de l'erreur augmente avec l'ampleur du quotient. Par exemple, 'fmod (9E14, 0.1);' évalue à environ 0.05, ce qui est purement mathématique. – supercat
@supercat plus de détails serait génial. Je pense avoir une idée de ce qui se passe dans les coulisses pour que ce que vous dites soit vrai, mais ce serait bien de voir les raisons pour lesquelles ce que vous dites est vrai; serait intéressant de voir comment cela fonctionne dans les coulisses (je pense que je comprends, mais pourrait très bien se tromper). – RastaJedi
Les valeurs à virgule flottante représentent des multiples entiers exacts ou des fractions de puissances de deux. Par exemple, le littéral entier 0.1 est exactement 3602879701896397/36028797018963968 (la dernière valeur est une puissance de deux). 'fmod (x, 0.1)' divisera x par cette fraction précise et prendra le reste, plutôt que de diviser par la valeur numérique "un dixième". – supercat