J'ai respecté ce code avec succès:
#include <stdio.h>
#include <math.h>
int q;
int main()
{
srand( time(NULL) );
int n=3;
q=ceil(sqrt(n));
printf("%d\n %d\n", n,q);
if(n == 2)
printf("%d\n is prime", n);
else if(n % 2 == 0.0 || n < 2)
printf("%d\n is not prime", n);
else
{
int x;
for(x = 0; x < q; x++){
if(n % x == 0)
{
printf("%d\n is not prime", n);
return;
}
else
printf("%d\n is prime", n);
}
}
}
Mais lorsque j'exécute mon code, l'erreur suivante apparaît:
Exception à virgule flottante
Que signifie cette erreur et comment puis-je la réparer?
Cela est dû à n % x
, lorsque x
est égal à 0. Vous devriez avoir x à partir de 2. Vous ne devriez pas utiliser de virgule flottante ici, car vous n'avez besoin que d'opérations entières.
Notes générales:
q
soit global.http://en.wikipedia.org/wiki/Division_by_zero
http://en.wikipedia.org/wiki/Unix_signal#SIGFPE
Cela devrait vous donner une très bonne idée. Puisqu'un module est, dans son sens fondamental, division avec un reste, something % 0
IS division par zéro et en tant que tel, déclenchera l'envoi d'un SIGFPE.
Cela est dû à n % x
où x = 0
dans la première itération de la boucle. Vous ne pouvez pas calculer un module par rapport à 0.