浮点异常

13

我成功编译了这段代码:

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

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

浮点异常

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


https://dev59.com/vFHTa4cB1Zd3GeqPT7VP - Smeagol
3个回答

31

这是由于当x为0时,n % x会导致此问题。您应该从2开始使用x。在这里完全不需要使用浮点运算,因为您只需要整数运算。

一般提示:

  1. 尽量改善代码格式。注意使用一致的风格。例如,您有一个else紧随if括号之后(甚至没有空格),而另一个则在两行之间。
  2. 除非必要,否则不要使用全局变量。全局变量q没有理由成为全局变量。
  3. 在非void(int)函数中不要返回没有值的情况。

9
补充说明:当你的计算机没有特殊处理“整数被0除”的情况时,会出现“浮点异常”。更好的描述应该是“算术异常”,但这个错误命名已经历史悠久,可能无法改变了。 - Roland Illig

2

0

这是由于第一次循环迭代中x = 0,导致n % x无法计算模数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接