sqrt()返回INF

时间:2011-02-01 18:34:19

标签: c math.h sqrt

您好我正在尝试使用长双打进行一些计算,并且我从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;
}

谢谢!

2 个答案:

答案 0 :(得分:8)

sqrt获取并返回double。当您拨打电话时,您的long double将转换为无法存储如此大数字的double,因此会获得无限值。

使用sqrtl获取并返回long double

答案 1 :(得分:2)

当参数为sqrt时,

INFINITY将返回INFINITY; e.g:

#include <stdio.h>
#include <math.h>
int main()
{
  printf("%g %g\n", INFINITY, sqrt(INFINITY));
  return 0;
}