2010-09-01 19 views
9

éxito Accedí este código:coma flotante excepción

#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); 
     } 
    } 
} 

Pero cuando ejecuto mi código me sale el siguiente error:

Floating point exception

¿Qué significa este error y cómo puedo solucionarlo?

+0

Debe sangrar todo su código para que no tenga un formato tan raro. – hb2pencil

+0

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

Respuesta

24

Es causado por n % x, cuando x es 0. En su lugar, debe tener x start en 2. No debe usar ningún punto flotante aquí, ya que solo necesita operaciones de enteros.

Indicaciones generales:

  1. intenta dar formato a su código mejor. Enfócate en usar un estilo consistente. P.ej. tiene otra persona que comienza inmediatamente después de un paréntesis (ni siquiera un espacio) y otra con una nueva línea intermedia.
  2. No use Globs a menos que sea necesario. No hay ninguna razón para que q sea global.
  3. No devuelve sin un valor en una función no nula (int).
+6

Adición: Obtiene una * excepción de punto flotante * ya que su computadora no tiene un caso especial para * división entera por 0 *. Una mejor descripción sería * Excepción aritmética *, pero este nombre inapropiado tiene una larga historia y probablemente ya no pueda modificarse. –

0

Es causado por n % x donde x = 0 en la primera iteración de bucle. No se puede calcular un módulo con respecto a 0.

Cuestiones relacionadas