Jumpi’s Notepad

My annotations about the life, universe and everything!!! ;)

Numeros complexos vs NaN (Not-a-Number)

with 3 comments

Lendo uma thread em uma lista de discussão que acompanho, surgiu uma duvida bem interessante sobre NaN e em uma das mensagens me deparei com a seguinte afirmação.

“Números imaginários são um exemplo, sqrt (-1) retorna NaN. Outro é dividir zero ou +/- infinito por zero.”

Vamos analisar essa frase começando pelo fim.

De acordo com a IEEE 754, se eu tenho uma variável a = 0 e divido a mesma por 0, vai dar um NaN, porem se eu tenho em a um valor positivo que tende ao infinito, o valor vai ser positivo e se o valor de a for negativo, logo essa divisão vai resultar em um valor negativo.

Ok, até aqui nenhuma objeção, tudo nos conformes. Porém, porém… agora vamos a primeira afirmação.

“Números imaginários são um exemplo, sqrt (-1) retorna NaN.”

Ooopss…. Sinto que houve um equivoco ai, pois não foi definido pelo autor da frase em qual conjunto numérico ele está trabalhando, penso que ele se limitou a qualquer conjunto no qual sqrt(-1) realmente não tem solução (Q, R, Z…), porém, existe também o conjunto dos complexos e nesse conjunto, existe solução para sqrt(-1). E vamos provar isso utilizando o nosso velho amigo C++, pois ele possui uma classe/template por padrão que trabalha com números complexos usando tipos de ponto flutuante, ou seja, utilizando o nosso amigo, podemos provar que existe sim solução para sqrt(-1) no campo dos complexos

Listarei logo abaixo um código simples que demonstra a nossa teoria em C++, ou seja, provar que existe sim resposta para sqrt(-1) e que ela é diferente de NaN

(jumpi@Painkiller:~)$ vi complex.cpp


#include <iostream>
#include <complex>

using namespace std;

int main(int argc, char **argv)
{
    complex<float> res = sqrt(complex<float>(-1));
    cout << res << endl;
    return(0);
}

(jumpi@Painkiller:~)$ ./complex
(0,1)
(jumpi@Painkiller:~)$

Antes recapitulando, a forma geral de um numero complexo no seu plano obedece a forma a + b*i, onde a representa o numero real e b um numero imaginário, ou seja, o retorno do tipo complex em C++ retorna as coordenadas de um numero complexo no plano.

No nosso caso, substituindo na fórmula, teremos a + b*i == 0 + 1*i que equivale a i.

Vamos fazer o teste para confirmar?? Utilizando o google, sim… o google, pois a busca serve como uma excelente calculadora e vai nos ajudar com a prova, digite sqrt(-1), qual a resposta??? Sim… sim… sqrt(-1) equivale a i, mesmo resultado apresentado pelo nosso simples programinha em C++.

Q.E.D.

Logo, sqrt(-1) = i e não um NaN conforme foi dito na thread.

Essa foi apenas uma demonstração de que não podemos esquecer da base matemática para formular uma resposta, principalmente no que envolve recursos que podem ser representados pela linguagem.

Maiores informações podem ser encontradas nos seguintes sites:

Wolfram Complex Number
Wolfram Complex Plane
C plus plus complex reference

About these ads

Written by jumpi

January 6, 2009 at 3:45 am

Posted in Math, Programming

3 Responses

Subscribe to comments with RSS.

  1. Ótimo post, Alan!

    Nossa, acho que não ouço falar de números complexos desde quando eu estava estudando para o vestibular =)

    []s

    Wanderley Caloni

    January 6, 2009 at 10:37 am

  2. Oi Alan!
    Legal o post. Achei a teoria e apresentação interessantes. Porém, olhando por um ponto de vista mais prático, a frase que vc mencionou não está, necessariamente, equivocada.
    Tendo em vista que a API de C, herdada por C++, possui uma função chamada sqrt, pode ser que o autor da frase estivesse se referindo a esse universo. Consequentemente, o conjunto numérico dos inteiros também estava definido, já que por padrão o literal -1 é implicitamente convertido para int em C++. Portanto, o resultado de sqrt(-1) é, de fato, um NaN.
    Apesar do seu exemplo estar correto, ele não contradiz a frase mencionada.
    Bom, espero não estar sendo muito filosófico… :)

    0xc0de

    January 12, 2009 at 10:56 am

  3. Opa Leandro, por isso mesmo que deixei explicito no post…

    “Sinto que houve um equivoco ai, pois não foi definido pelo autor da frase em qual conjunto numérico ele está trabalhando, penso que ele se limitou a qualquer conjunto no qual sqrt(-1) realmente não tem solução (Q, R, Z…)”

    Pois fiz a suposicao de que realmente o autor da frase estava falando em inteiro, no caso o conjunto Q… :)

    Obrigado e volte sempre que quiser… :)

    jumpi

    January 12, 2009 at 3:58 pm


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: