继续得到1.#INF作为我的输出

时间:2015-04-21 06:41:55

标签: c++

#include <iostream>
using namespace std;

double calc(int a, int b);

int main()
{
    int n1, n2;

    cout << "Enter a number for a: ";
    cin >> n1;
    cout << "Enter a number for b: ";
    cin >> n2;

    cout << calc(n1, n2) << endl;

    system("PAUSE");
    return 0;

}

double calc(int a, int b)
{
    double s;
    s = (a) / ((sqrt(a / b)));
    return s;
}

该程序用于检查两个整数是否大于零。如果是,它将计算公式。否则,如果其中一个整数为零或小于零,它将不返回任何内容并退出程序。 我的问题是,无论我为a和b输入什么,我都会得到1.#INF作为输出,我不知道为什么。我已经在一个单独的程序中检查了公式,它运行正常。 有什么想法吗?

4 个答案:

答案 0 :(得分:3)

在这里,您使用的是int个数字:

s = (a) / ((sqrt(a / b)));

如果a小于b,则a/b(两者都是整数,请记住,因此结果的小数部分将会丢失)将等于0,导致除以0.你需要将其中一个数字加倍:

s = (a) / ((sqrt(static_cast<double>(a) / b)));

答案 1 :(得分:1)

sqrt接受并返回一个双精度数。当您使用整数参数调用它时,它将以double形式转换,因此将获得无穷大的值。

将您的功能签名更改为:

double calc(double a, double b);

并将n1和n2声明为double。

答案 2 :(得分:0)

你说当其中一个整数为0或更小时,该函数将退出程序,但在哪里?

尝试像这样检查:

此外,您应该检查a是否大于b

double calc(int a, int b)
{
    double s;
    if(a <= 0) exit(-1);
    if(b <= 0) exit(-1);
    if(a < b)  exit(-1);
    s = (a) / ((sqrt(a / b)));
    return s;
}

答案 3 :(得分:0)

你遇到了无限问题。对于它使用isinf。以下是一些示例用法:

#include <stdio.h>      /* printf */
#include <math.h>       /* isinf, sqrt */

    int main()
    {
      printf ("isinf(-1.0/0.0)  : %d\n",isinf(-1.0/0.0));
      printf ("isinf(sqrt(-1.0)): %d\n",isinf(sqrt(-1.0)));
      return 0;
    }

输出:

  

isinf(-1.0 / 0.0):1 isinf(sqrt(-1.0):0