Comprends pas cette erreur de compilati

remi -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
les gars , regarder ce programme , lorsque je compile , cela me genere les erreurs que je ne saisi pas .

ou est le probleme? voici l'erreur que le compilateur me retourne au niveau de linstruction if n%2==0

C:\remi\lehr_c++\nombre_premier.cpp
[Warning] In function `int main()':

14 C:\remi\lehr_c++\nombre_premier.cpp
invalid operands of types `double' and

#include <stdio.h>
#include <conio.h>
#include <math.h>

int main( )
{
double j, n;

for(j=0; j<=2; j++)
{
n=pow(2,j)-1;

if (n%2==0)
printf("%f",n);
}

getch();

return 0;
}

2 réponses

hssissen Messages postés 844 Date d'inscription   Statut Membre Dernière intervention   50
 
Salut,
Je crois que tu devrais declarer ton n comme entier, je crois avec integer ou int, je ne me rappelle pas, ou bien faire un cast.
0
remi
 
merci pour ton aide , le probleme est que je veux avoir le modulo des nombres tres grand avec des millions des chiffres .
enfin qu'est que un cast
0
hssissen Messages postés 844 Date d'inscription   Statut Membre Dernière intervention   50 > remi
 
C'est de convertir une variable "typée" a un autre type. Comme ta variable n a ete declare double, tu peux je crois la convertir par int(n), il faudrait confirmer ca, je ne me rappelle âs de la syntaxe exacte.
0
hssissen Messages postés 844 Date d'inscription   Statut Membre Dernière intervention   50 > remi
 
Je crois que c'est le type de j qui pose probleme. J est un index dans la boucle donc doit etre un entier (int ou integer j) et pas double (pour les grands nombres), ce dernier est un type reel avec plus de bits en memoire allouée. Essaie avec ca et tiens moi au courant.
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
salut
Il n'y a pas de problème avec "j" dans une boucle tu met ce que tu veux.
par contr j++ ne te renvoi pas l'entier suivant, mais le reel suivant.
En revanche "n" doit être un entier pour pouvoir utilisé le modulo.
double ne permet pas vraiment d'utiliser des grand nombre, tu as un problème de résolution, tu as un certain nombre de chiffre significatif : si n(double) est trop grand sa valeur des unité est oublié. pour shématisé, il y a un "n" minimum tel que : n+1.==n est vrai.
je te conseil donc de déclarer n comme long int si tu veux des nombre négatif, ou "unsigned long int" si tu ne veux que des positifs. Ces types ont déjà de grandes limites.
0