¿Por qué me devuelve -inf o -nan como respuesta mi algoritmo en c?

publicado por: Anonymous
#include<stdio.h>
#include<math.h>

int factorial(int N){
    int p=1,i;
    for(i=1;i<=N;i++){
       p = p*i; 
    }
    return p;
}

void msgBienvenida(){
    printf("------------------------------------------------n");
    printf("este programa calcula el valor de sen(a)n");
    printf("para un valor de a dado por el usuario.n");
    printf("El usuario debe suministrar adicionalmenten");
    printf("el numero de terminos a utilizar de la serie.n");
    printf("------------------------------------------------n");
}

int main(){
    double a, N, Sen;
    int i;
    long double Suma;

    msgBienvenida();

    printf("Ingrese un valor 'a' en grados, al que desee calcularle el seno ");
    scanf("%lf", &a);

    printf("Ingrese el numero de terminos a utilizar de la serie ");
    scanf("%lf", &N);


    a = (M_PI/180)*(a);
    Suma = 0;

    for(i=1;i<=N;i++){
        Sen = (pow(-1,i+1)) * (pow(a,2*i-1) / factorial(2*i-1));
        Suma = Suma + Sen;
    }

    a = (a) * (180/M_PI);
    printf("El valor del sen(%lf) es %Lfn",a, Suma);
}

Al ejecutar este algoritmo solo me brinda una solución hasta que N vale 17, cuando vale 18 me muestra “-inf” donde debería mostrar el resultado de Suma y de 19 en adelante me muestra “-nan” en el mismo lugar ¿Qué ocurre aquí?

solución

El problema que tienes es que el factorial de 35 en este caso es un número muy grande.

(35)! = "10333147966386144929666651337523200000000"

Este número es muy grande para un int es por eso que te sale -inf. Ahora ese número que da es más grande del que puede permitir un unsigned long long

Máximo = 9,223,372,036,854,775,807 (18,446,744,073,709,551,616 cuando es unsigned)

Tendrías que mirar tal vez algo referente a grandes números para poder representarlo.

Saludos.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *