c++ 为什么在if中得到“-inf”而不是键入的cout

o75abkj4  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(192)

问题是确定方程a*x+B=0是否有1个解,并写出它,如果有0个解,则不写出任何解,如果有无限个解,则写出无限个解

#include <iostream>
using namespace std;

int main()
{
    float a,b,x;
    cin>>a>>b;
    x=-b/a;
    if(x!=0)
        cout<<x<<endl;
    else if(a==0)
        cout<<"no solution"<<endl;
    else
        cout<<"infinite solutions"<<endl;
    return 0;
}

它应该写“没有解决方案”,但它却写了-inf

gcuhipw9

gcuhipw91#

您的检查顺序错误。由于您没有指定输入,我的假设是:

a=0;
b=1; // Or any other number, for that matter

这意味着,对于您的输入,您将-1除以0,结果为-inf(数学上不正确,但浮点数(有时)是这样工作的,请参见The behaviour of floating point division by zero
If-else链从上到下计算,在计算为true的第一个条件处停止。
由于您首先检查x!=0,并且-inf不等于0,因此您只得到-inf的输出。
为了确保您能够捕捉到被零除的情况,您需要首先检查它。
您的代码将如下所示:

#include <iostream>
using namespace std;

int main()
{
    float a,b,x;
    cin>>a>>b;
    x=-b/a;
    if(a==0)
        cout<<"no solution"<<endl;
    else if(x!=0)
        cout<<x<<endl;
    else
        cout<<"infinite solutions"<<endl;
    return 0;
}

相关问题