[英]sqrt function in C prints -nan
在执行一些代码练习时,我观察到由sqrt函数引起的异常输出,
代码是
#include<stdio.h>
#include<math.h>
int main()
{
double l,b,min_r,max_r;
int i;
scanf("%lf %lf",&b,&l);
printf("%lf %lf\n",sqrt(l*l+b*b),sqrt(b*b-l*l));
return(0);
}
输出:
4 5
6.403124 -nan
为什么会这样。
看一下数字: b
是4, l
是5。所以b*b - l*l
是-9。 -9的平方根是多少? 这是一个虚数,但sqrt
不支持虚数结果,因此结果为nan(不是数字)。 这是域错误。 解决方案:不要将否定参数传递给sqrt
。
在您的情况下,不验证输入会导致问题。
sqrt(b*b-l*l)
将b
设为4并将l
设为5会产生-ve数,这很可能是您不想要的。
FWIW,负数的根需要虚部表示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.