浮点异常

时间:2010-09-01 06:19:43

标签: c floating-point

我成功编写了这段代码:

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

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

  

浮点异常

这个错误意味着什么,我该如何解决?

3 个答案:

答案 0 :(得分:27)

n % x引起,当x为0时,你应该让x从2开始。你根本不应该使用浮点数,因为你只需要整数运算。

一般说明:

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

答案 1 :(得分:1)

http://en.wikipedia.org/wiki/Division_by_zero

http://en.wikipedia.org/wiki/Unix_signal#SIGFPE

这应该给你一个非常好的主意。因为模数在其基本意义上是用余数除something % 0 IS除以零,因此会触发抛出SIGFPE。

答案 2 :(得分:0)

它是由n % x引起的,其中x = 0在第一次循环迭代中。您无法计算相对于0的模数。