J'ai un programme que j'écris qui répertorie 100 000 nombres premiers. Cela fonctionne bien pour 10 chiffres, mais après tant de chiffres, ils se transforment en valeurs négatives. J'ai changé l'INTS vers Long Ints et cela n'a rien changé, alors je les ai changés vers les doubles et que je reçois l'erreur énumérée dans le titre. Que devrait être ma variable? Gardez à l'esprit que je suis toujours nouveau pour programmer. J'ai également regardé des postes antérieurs et je n'ai pas vu la réponse.
3 Réponses :
Vous ne pouvez pas utiliser un double avec l'opérateur, vous devez avoir un int.
Vous devez: #include #include <math.h>
int is_prime(double x,char array[]){
//doesnt use array but I put it in there
double j=2;//divider
for(j=2;j<=pow(x,0.5);j++){
if(fmod(x,j)==0){
return(0);
} //isnt prime
}
return(1);// because it is prime.
}
Impressionnant, je n'aurais jamais compris cela seul.
Vous avez deux options:
Stick avec l'opérateur Inclure % code>, alors vous devez lancer les entrées sur INT CODE> S P>
if(fmod(x, j) == 0)
math.h code> puis utilisez fmod code>: p>
if(((int)x % (int)j) == 0)
MATH.H CODE> SON AFFAIRE UNE BELLE SOLUTION, +1.
Votre question immédiate peut être résolue avec FMOD code>, mais pour votre objectif de nombres premiers de grande valeur, vous pourrez peut-être mieux regarder une classe de grande entière, comme ça à
La réponse à ceci est fondamentalement la même chose que dans Comment puis-je convertir du flotteur vers INT avec module en C?
Hein?
Long code> est requis pour atteindre au moins 2 milliards et le 100 000e numéro de choix n'est que de 1,3 million. Si vous débordez, votre programme a raté un lot i> de nombres premiers.Long code> devrait être bien (selon queint code> soit pourvu que c'est 32 bits, ce qui est normal). Comparez la sortie de votre programme à ceci: numérique.library.upenn.edu / Webbin / gutbook / lookup? Num = 65 , voyez où cela va mal. Et vérifiez que vous émettez les valeurs correctement ...@ Steve J'ai apporté les modifications suggérées et a toujours les mêmes résultats, est-ce parce que je pose ces valeurs dans un tableau de charme [], si cela devrait être autre chose?
Vous devriez vraiment utiliser un type d'entier pour les nombres premiers, pas une représentation de points flottant. Je suis d'accord avec Steve Jessop que vous avez probablement un autre problème. Vous devriez essayer de résoudre ce problème - je m'attends à ce que votre enseignant marquait une réponse utilisée
double code>. FWIW, le 100 000e Prix est de 1 299 709.@spong Ouais j'ai compris que ce n'était pas mon problème initial. Quand j'ai fait ces changements, rien n'a changé vraiment, je ne sais pas ce qui ne va pas, je soupçonne un tableau de charret [], ne peut pas tenir les valeurs que j'essaie de rester. Idées?
@Pisfire: Oui, si vous mettez les résultats dans le tableau
Char code>, c'est votre problème. La gamme deChar code> sur votre implémentation C est presque certainement [-128,127], de sorte que les valeurs supérieures à 127 iront mal.Char CODE> signifie un caractère, un octet ou un très petit entier. Comme les types vont, il est à peu près inutile pour l'arithmétique.