2012-02-14 33 views
14

Después de compilar el programa que estoy recibiendo por debajo de erroroperandos no válidos de tipo int y doble a binario 'operador%'

invalid operands of types int and double to binary 'operator%' at line 
"newnum1 = two % (double)10.0;" 

¿Por qué es así?

#include<iostream> 
#include<math> 
using namespace std; 
int main() 
{ 
    int num; 
    double two = 1; 
    double newnum, newnum1; 
    newnum = newnum1 = 0; 
    for(num = 1; num <= 50; num++) 
    { 

     two = two * 2; 
    } 
    newnum1 = two % (double)10.0; 
    newnum = newnum + newnum1; 
    cout << two << "\n"; 
    return 0; 
} 
+1

'(doble) 10.0' este tipo no hace nada. 10.0 ya es de tipo doble. 10.0f es de tipo flotante y 10 es de tipo entero (firmado). – Lundin

+0

@Lundin: '10' es específicamente del tipo' int', no solo de cualquier tipo de entero con signo arbitrario. –

Respuesta

33

Debido % sólo está definido para los tipos enteros. Ese es el operador de módulo.

5.6.2 de la norma:

Los operandos de * y/o tendrá aritmética tipo de enumeración; los operandos de% tendrán un tipo de enumeración o integral. [...]

Como señaló Oli, puede usar fmod(). No olvide incluir math.h.

+0

uso: incluye 'math.h' y luego usa' fmod (15, 2); '. Más en ['fmod' docs] (http://www.cplusplus.com/reference/cmath/fmod/). – Matt

17

Porque % solo funciona con tipos enteros. Quizás quiera usar fmod().

1

Sí. % operador no está definido para el tipo doble. Lo mismo es cierto para operadores bit a bit como "&, ^, |, ~, < <, >>" también.

Cuestiones relacionadas