[英]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.