#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作为输出,我不知道为什么。我已经在一个单独的程序中检查了公式,它运行正常。 有什么想法吗?
答案 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