簡體   English   中英

C打印中的sqrt函數-nan

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM