2012-02-14 17 views
14

Po kompilacji programu otrzymuję poniżej błędunieprawidłowe argumenty typów int i double na binarny „operator%”

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

Dlaczego tak jest?

#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

'(double) 10.0' ten typecast nic nie robi. 10.0 jest już podwójnym rodzajem. 10.0f to typ zmiennoprzecinkowy, a 10 to (podpisany) typ całkowity. – Lundin

+0

@Lundin: '10' jest specyficzne dla typu' int', a nie tylko dowolnego dowolnego typu liczbowego ze znakiem. –

Odpowiedz

33

Ponieważ % jest zdefiniowany tylko dla typów całkowitych. To jest operator modulus.

5.6.2 normy:

Operandy * i/lub mają arytmetyki typu wyliczenia; argumenty% muszą mieć typ całkowania lub wyliczenia. [...]

Jak zaznaczył Oli, można użyć fmod(). Nie zapomnij podać numeru math.h.

+0

użycie: dołącz 'math.h', a następnie użyj' fmod (15, 2); '. Więcej w ['fmod' docs] (http://www.cplusplus.com/reference/cmath/fmod/). – Matt

17

Ponieważ % działa tylko z typami całkowitymi. Być może chcesz użyć fmod().

1

Tak. Operator% nie jest zdefiniowany dla podwójnego typu. To samo dotyczy operatorów bitowych, takich jak "&, ^, |, ~, < <, >>".

Powiązane problemy