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