Exception en virgule flottante

J’ai respecté ce code avec succès:

#include  #include  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 je lance mon code, l’erreur suivante apparaît:

Exception en virgule flottante

Que signifie cette erreur et comment puis-je la réparer?

Cela est causé par n % x , lorsque x est 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:

  1. Essayez de mieux formater votre code. Concentrez-vous sur un style cohérent. Par exemple, vous en avez un autre qui commence immédiatement après une accolade if (pas même un espace) et un autre avec une nouvelle ligne entre les deux.
  2. N’utilisez pas de globals sauf si nécessaire. Il n’y a aucune raison pour que q soit global.
  3. Ne retournez pas sans valeur dans une fonction non-void (int).

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, une division avec un rest, something % 0 IS division par zéro et en tant que tel, déclenchera un SIGFPE.

Cela est causé par n % xx = 0 dans la première itération de la boucle. Vous ne pouvez pas calculer un module par rapport à 0.