簡體   English   中英

為什么雙,長雙總是顯示0為output?

[英]Why double, long double are always showing 0 as output?

我正在編寫代碼來查找點(25,40000)與固定點(47,132000)的距離。 距離始終打印為 0.0000。 我試過檢查其他組合,給出較小的點值,然后用 %d 打印它們,效果很好。 但是對於 %ld,%lf,%Lf 有什么不好。 請幫忙。

#include<stdio.h>
#include<math.h>

int main()
{
   int x=25,y=40000;  
   //printf("Enter x,y");
   //scanf(%d %d,&x,&y) 
   long double dist;
   dist=sqrt((47-x)*(47-x)+(132000-y)*(132000-y));   
   printf(" x= %d y=%d dist=%Lf\n",x,y,dist);
   return 0;
}

Integer 溢出發生在您的代碼中。 以下代碼有效 -

int main()
{
   long long int x=25,y=40000;       //int was overflowing and causing you error
   long double dist;
   dist=sqrt((47-x)*(47-x)+(132000-y)*(132000-y));   //this will safely compute within range and return the desired result
   printf("After distance\n");
   printf(" x= %lld y=%lld dist=%Lf\n",x,y,dist);
   return 0;
}

你得到了錯誤的輸出(當我嘗試時-nan ),因為sqrt()中的表達式值溢出並變為負數。 (132000-y)*(132000-y)不適合 integer 范圍並給出負值。 由於未定義負平方根,因此sqrt()返回nan作為結果。 將 y 的類型更改為long long int將解決該錯誤。

希望這可以幫助 !

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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