2010-09-01 184 views
9

我成功地遵守这个代码:浮点异常

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

但是当我运行我的代码,我得到以下错误:

Floating point exception

这个错误是什么意思,我该如何解决?

+0

您需要缩进所有代码,以避免格式错乱。 – hb2pencil 2010-09-01 06:22:34

+0

http://stackoverflow.com/questions/4122172/c-programming-floating-point-exception – TGar 2017-01-20 12:29:44

回答

24

这是由n % x引起的,当x为0.您应该将x从2开始。你根本不应该使用浮点,因为你只需要整数运算。

一般注意事项:

  1. 尝试格式化你的代码更好。专注于使用一致的风格。例如。你有一个在if支撑之后立即开始的其他元素(甚至没有空格),另一个元素之间有一个换行符。
  2. 除非必要,否则不要使用全局变量。没有理由让q成为全球性的。
  3. 在非void(int)函数中不返回值。
+6

此外:您将得到一个*浮点异常*,因为您的计算机没有*整数除0 *的特殊情况。一个更好的描述将是*算术例外*,但这个用词不当有很长的历史,可能不能再改变。 – 2010-10-16 13:32:07

0

这是由n % x造成的,其中x = 0在第一次循环迭代中。你无法计算对于模数为0。