Ir para conteúdo
Fórum Script Brasil
  • 0

Variável recebendo valor nan


frankxx

Pergunta

Antes de mais nada agradecer os membros do fórum pela ajuda dada.

Minha dúvida vem quanto ao seguinte código para calcular o sen de algum número pela sequência de Taylor.

Não sei o erro mas ela me retorna um valor nan . Nunca tinha visto antes. Grato desde já !

#include <iostream>
#include <cstdlib>

using namespace std;

const double pi = 3.141592653589793;

double Fatorial ( int n )
{
    if ( n == 1 )
    {
        return 1;
    }
    else
    {
        double fatorial = 1;
        fatorial *= n * Fatorial ( n - 1 );
    }
}

double Potencia ( double x , int y )        // Calcula a potência de x elevado a y. OBS : y é um inteiro , negativo ou positivo
{
    if ( y == 0 ) { return 1; }           // Caso y = 0 , todo número elevado a zero = 1

    if ( y >= 1 )                         // Caso y > 1 onde será necessário multiplicações sucessivas
    {
        double Potencia = x;

        while ( y > 1 )
        {
            Potencia *= x;
            y--;
        }
    return Potencia;
    }
}

int main()
{
    double x;
    cout << " Digite o x em graus para saber sen(x) : ";
    cin >> x;
    int termos;
    cout << " Digite o numero de termos da sequencia de Taylor que deseja : ";
    cin >> termos;

    x = (x*pi)/180;

    double Seno = 0;

    for ( int n = 0; n < termos; n++ )
    {
        Seno += Potencia ( -1 , n ) * Potencia ( x , 2 * n + 1 ) / Fatorial ( 2* n + 1 );
    }

    cout << Seno;
    
    system ("pause");
    return 0;
}

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olá!

O problema é com a função Fatorial que não retorna o valor. Ela tem return apenas para quando n for 1!

O correto seria:

double Fatorial ( int n )
{
    if ( n == 1 )
    {
        return 1;
    }
    else
    {
        return n * Fatorial ( n - 1 );
    }
}
Outro problema que vejo na sua lógica é que, na função Potencia, se y tiver valor negativo, a função não retorna nada. Traduzindo: retornará lixo! O correto seria retornar algum valor nesse caso como demonstrado abaixo:
double Potencia ( double x , int y )        // Calcula a potência de x elevado a y. OBS : y é um inteiro , negativo ou positivo
{
    if ( y == 0 ) { return 1; }           // Caso y = 0 , todo número elevado a zero = 1

    if ( y >= 1 )                         // Caso y > 1 onde será necessário multiplicações sucessivas
    {
        double Potencia = x;

        while ( y > 1 )
        {
            Potencia *= x;
            y--;
        }
    return Potencia;
    }

    return 0;
}

Abraços,

Marcelo Utikawa da Fonseca

Link para o comentário
Compartilhar em outros sites

  • 0
Olá!

O problema é com a função Fatorial que não retorna o valor. Ela tem return apenas para quando n for 1!

O correto seria:

double Fatorial ( int n )
{
    if ( n == 1 )
    {
        return 1;
    }
    else
    {
        return n * Fatorial ( n - 1 );
    }
}
Outro problema que vejo na sua lógica é que, na função Potencia, se y tiver valor negativo, a função não retorna nada. Traduzindo: retornará lixo! O correto seria retornar algum valor nesse caso como demonstrado abaixo:
double Potencia ( double x , int y )        // Calcula a potência de x elevado a y. OBS : y é um inteiro , negativo ou positivo
{
    if ( y == 0 ) { return 1; }           // Caso y = 0 , todo número elevado a zero = 1

    if ( y >= 1 )                         // Caso y > 1 onde será necessário multiplicações sucessivas
    {
        double Potencia = x;

        while ( y > 1 )
        {
            Potencia *= x;
            y--;
        }
    return Potencia;
    }

    return 0;
}

Abraços,

Marcelo Utikawa da Fonseca

Obrigado , resolveu o problema ! Segundo post que me ajuda não sei nem como agradecer . Sou novo no fórum . Como fecho o tópico para resolvido e te dou "curti" ou não sei ;D

Link para o comentário
Compartilhar em outros sites

  • 0

De nada! A intenção é de ajudar mesmo... :)

Precisando de algo mais é só perguntar.

E a única ajuda que espero é a boa vontade das pessoas em aprender. Com certeza isso já será o bastante... B)

Sobre fechar o tópico: Tente alterar o título do tópico adicionando [RESOLVIDO] no início.

Abraços,

Marcelo Utikawa da Fonseca

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652,1k
×
×
  • Criar Novo...