嗨,我正在尝试做一些长双精度的计算,并且我正在从sqrt()函数中获得INF。
代码:
#include <math.h>
#include <stdio.h>
int main()
{
long double bigNUMBER;
long double p1,p2,p3;
long double p4;
p1 = 4.769547e+155;
p2 = 1.012994e+170;
p3 = 1.714812e+169;
p4 = p1*p1 + p2*p2 + p3*p3;
bigNUMBER = sqrt(p4);
printf("product: %Lf\n\n", p4); // 1055562645989439942507809393771156765931135...
printf("\n result %Lf\n\n", bigNUMBER); // INF
return 0;
}谢谢!
发布于 2011-02-02 02:37:25
sqrt接受并返回一个double。当你调用它时,你的long double会被转换成一个double,它不能存储这么大的数字,因此会得到无穷大的值。
使用接受并返回long double的sqrtl。
发布于 2011-02-02 02:39:44
当参数也为INFINITY时,sqrt将返回INFINITY;例如:
#include <stdio.h>
#include <math.h>
int main()
{
printf("%g %g\n", INFINITY, sqrt(INFINITY));
return 0;
}https://stackoverflow.com/questions/4866511
复制相似问题