Jump to content

Calcular raíz N


skiller10
 Share

Recommended Posts

Boas,

Descobri que para calcular a raíz N de um número X, era necessário fazer:

  • pow(X, (1.0/N));

No entanto isto nem sempre funciona, enviando um valor "nan" :S

Como posso resolver isto?

"Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.."

Link to comment
Share on other sites

Podes estar a tentar calcular a raíz de um número negativo, o que dá um valor com componente imaginária, que não é representável num double 😉

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Basicamente eu cheguei a esta fórmula:

S = nV(A/;)

Não sei se dá para perceber mas S é igual a raíz n de A a dividir por B.

Por exemplo para este caso:

A = -1

B = 8

n = 3

Sei que irá dar S = -2.

Sabes como posso resolver isto?

"Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.."

Link to comment
Share on other sites

A raíz cúbica de -1/8?

Estarás a trabalhar com números complexos. Uma raíz N de um número complexo pode ser representada com N resultados diferentes. Eventualmente, um desses resultados pode ser um número inteiro (principalmente com raízes ímpares), mas não é o resultado completo.

Dá uma vista de olhos na wikipédia:

http://en.wikipedia.org/wiki/Square_root#Square_roots_of_negative_and_complex_numbers

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Enganei-me, era a raíz cúbica de 8/-1, que dá -2

De qualquer maneira vou olhar o que mandaste.

Acho que já sei uma maneira de o fazer:

  • Calcular a raíz n de |A| e a raíz n de |B|.
  • Se A ou B for negativo, atribuir o sinal ao resultado da raíz n respectivamente.
  • No final, dividir um por outro.

"Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.."

Link to comment
Share on other sites

Podes também ver no artigo da raiz cúbica:

http://en.wikipedia.org/wiki/Cube_root#Real_numbers

Mas atenção que não estou a dizer que não podes simplesmente apresentar o resultado real e eliminares os complexos. Só tens que ter em consideração que nem todos os cálculos têm um resultado real. Ou seja, se não me engano, para um número negativo, para teres um resultado real, N tem que ser ímpar.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Em C++, como posso ver se o resultado obtido é ou não complexo, e já agora, se o mesmo é inteiro?

A única maneira que vejo para saber se um número é inteiro é converter para string e ver se existe algum ponto/virgula. Alguma maneira mais eficiente?

"Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.."

Link to comment
Share on other sites

Tens que ver se o número do qual queres achar a raiz é negativo e depois verificas se N é ímpar.

Se é para converteres para String, mais vale fazer o cast para um int e depois subtrair e ver se é zero.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Obrigado 😉

"Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.."

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.