为什么 double, long double 总是显示 0 作为输出?

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;
}

整数溢出 发生在您的代码中。以下代码有效 -

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) 不适合整数范围并给出负值。由于未定义负平方根,因此 sqrt() 返回 nan 作为结果。将 y 的类型更改为 long long int 将解决错误。

希望对您有所帮助!