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!
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