C print -nan中的sqrt函数

时间:2015-12-15 12:24:14

标签: c sqrt

在做一些代码练习时, 我观察到了由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

为什么会这样。

2 个答案:

答案 0 :(得分:6)

查看数字:b为4,l为5.所以b*b - l*l为-9。什么是-9的平方根?这是一个虚数,但sqrt不支持虚数结果,因此结果是nan(不是数字)。这是一个域错误。解决方案:不要将否定参数传递给sqrt

答案 1 :(得分:2)

在您的情况下,不验证输入会导致问题。

sqrt(b*b-l*l)

b为4而l为5会产生-ve数,这很可能是您不想要的。

FWIW,负数的根需要表示虚部。