浮点异常C++为什么以及它是什么?

sam*_*oul 33 c++ floating-point

我正在为Euler项目问题​​3构建一个程序,虽然这可能并不重要,因此我当前正试图使这个代码取一个数字并测试它是否是素数.现在,在我对函数进行故障排除之前,它在输入数字后立即给出了错误"浮点异常".这是代码:

int main()
{
    int input;
    cout << "Enter number: " << endl;
    cin>> input;
    int i = input/2;
    int c;
    for (i>0; i--;) {
        c= input%i;
        if (c==0 || i == 1)
            cout << "not prime" << endl;
        else
            cout << "prime" << endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以本质上为什么它给我一个浮点异常,这甚至意味着什么?

fre*_*low 35

for (i>0; i--;)
Run Code Online (Sandbox Code Playgroud)

可能是错的,应该是

for (; i>0; i--)
Run Code Online (Sandbox Code Playgroud)

代替.注意我把分号放在哪里.条件是在中间,而不是在开始时.

  • @Anonymous间接地,它是.分号的错位允许`i`为'0'(条件`i> 0`不会有). (6认同)

Cra*_*rks 34

A" 浮点数 "是如何计算机通常表示不是整数号码-基本上,带有小数点的数字.在C++中,您使用float而不是声明它们int.浮点例外是当你尝试做一些不可能的浮点数,如被零除发生错误.

  • 这个答案是错的.名称"浮点异常"是历史用词不当.浮点除以零是明确定义的(根据附件F/IEEE754)并且不产生任何信号.在OP的代码中,它是整数除零的方式,这是**未定义的行为**,表现在OP正在使用的特定实现上. (15认同)

Pet*_*ete 10

浮点异常的原因很多.看看你的代码你的for循环似乎有点"不正确".看起来可能是零除.

for (i>0; i--;){
c= input%i;
Run Code Online (Sandbox Code Playgroud)

因为你在减少我,所以在某些时候除以零.


Alg*_*man 5

由于这个页面是谷歌搜索“c++浮点异常”的第一个结果,我想添加另一个可能导致此类问题的东西:未定义变量的使用。