Ir ao conteúdo
  • Cadastre-se

C++ Problemas com função pow da biblioteca <math.h>


Marina V C

Posts recomendados

Olá, bom dia!

Estou tendo dificuldades com a função pow da biblioteca math.h. Estou tentando resolver a seguinte potência:

pow((pp2 / 2), (1.0 / 3.0)), sendo que na iteração atual pp2 = -19.931636166521173.

No entanto, o programa fornece como resultado o valor 1.0.

Mesmo se eu altero a fórmula para:

-pow((-pp2 / 2), (1.0 / 3.0)),

o resultado exibido é -1.0 e não -2.15 como esperado.

Mais uma informação: quando pp2 = 3.0072191312645324e-09, o resultado também está dando 1.

O que pode estar ocorrendo?

Muito obrigada,

Marina

Link para o comentário
Compartilhar em outros sites

Olá!

 

Então, esse problema ocorre dentro de um programinha cheio de classes. Sem contar que o problema ocorre dentro do comando while e não ocorre para todos valores de pp2. Consegui capturar o problema com os valores que eu coloquei no post anterior. Não sei como colocar o programa todo aqui e, como tem várias iterações, não sei como indicar para você exatamente onde o problema está ocorrendo. pp2 é uma variável double.

 

Quando eu separo esse parte do código, por exemplo, aparece nan(ind) e não 1.0:

#include "pch.h"
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
	double pp2 = -19.931636166521173;

	double p3 = pow((pp2 / 2), (1.0 / 3.0));

}

Obrigada!

Link para o comentário
Compartilhar em outros sites

@Marina V C

41 minutos atrás, Marina V C disse:

Olá!

 

 

Quando eu separo esse parte do código, por exemplo, aparece nan(ind) e não 1.0:

Obrigada!

Como eu disse, a função POW não funciona quando a base é negativa e o expoente é um número fracionário.

Para extrair a raiz cúbica, use a função cbrt()

int main()
{
    double pp2 = -19.931636166521173;

	double p3 = cbrt(pp2 / 2);
    cout << p3 << endl;
}

 

Link para o comentário
Compartilhar em outros sites

Bom Dia, @Marina V C !

 

16 horas atrás, Flávio Pedroza disse:

... a função POW não funciona quando a base é negativa e o expoente é um número fracionário.

Isso, a função retorna nan sigla para "não é um número". A operação é prejudicada pela combinação de dos fatores, já ditos pelo colega. 

 

Com relação o expoente racional nada pode se fazer porque nessas expressão a potencia x1/3 é uma operação com raízes (3√x).

 

Resta o sinal (-) cujo alternativa (exceto a função de RCúbica) é inverter sinal da base (sempre que negativa) e atribuir novamente o mesmo sinal na saída da função.

 

Code in C++

// Example program
#include <iostream>
#include <math.h>
  
using namespace std;

int main()
{
	double pp2 = -19.931636166521173;
	double p3;

	if (0 > pp2) p3 = -pow((-pp2 / 2.0), (1.0 / 3.0));
	else p3 = pow((pp2 / 2.0), (1.0 / 3.0));
	
	cout << p3;
        return 0;
}

 

Outras combinações faça com a mesma conveniência, da mesma maneira que fiz.

Bons Estudos.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...