为什么 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
将解决错误。
希望对您有所帮助!
我正在编写代码来查找点 (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
将解决错误。
希望对您有所帮助!