2010-09-01 7 views
9

Je me suis exécuté avec succès ce code:exception de virgule flottante

#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 quand je lance mon code, je reçois l'erreur suivante:

Floating point exception

Qu'est-ce que cette erreur signifie et comment puis-je résoudre ce problème?

+0

Vous devez mettre en retrait tout votre code afin qu'il ne soit pas formaté de façon bizarre. – hb2pencil

+0

http://stackoverflow.com/questions/4122172/c-programming-floating-point-exception – TGar

Répondre

24

Il est causé par n % x, lorsque x est 0. Vous devriez avoir x start à 2 à la place. Vous ne devriez pas utiliser de virgule flottante ici, car vous n'avez besoin que d'opérations entières.

Remarques générales:

  1. Essayez de formater votre code mieux. Focus sur l'utilisation d'un style cohérent. Par exemple. vous avez un autre qui commence immédiatement après une accolade si (pas même un espace), et un autre avec un retour à la ligne entre les deux.
  2. N'utilisez pas de globales sauf si nécessaire. Il n'y a aucune raison pour que q soit global.
  3. Ne pas retourner sans valeur dans une fonction non-void (int).
+6

Ajout: Vous obtenez une * exception à virgule flottante * puisque votre ordinateur n'a pas de cas particulier pour * division entière par 0 *. Une meilleure description serait * Exception arithmétique *, mais ce terme inapproprié a une longue histoire et ne peut probablement plus être modifié. –

0

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

Questions connexes