Pregunta

Hola, estoy tratando de hacer algunos cálculos con dobles largos y me estoy infliendo en la función sqrt ().

Código:

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

¡Gracias!

¿Fue útil?

Solución

sqrt toma y devuelve un double. Cuando lo llamas, tu long double se convertirá en un double que no puede almacenar un número tan grande y, por lo tanto, obtendrá el valor del infinito.

Usar sqrtl que toma y devuelve un long double.

Otros consejos

sqrt Volverá INFINITY Cuando el argumento es INFINITY también; p.ej:

#include <stdio.h>
#include <math.h>
int main()
{
  printf("%g %g\n", INFINITY, sqrt(INFINITY));
  return 0;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top