Dr_Lion Posted May 24, 2012 at 04:03 PM Report #457900 Posted May 24, 2012 at 04:03 PM Tal como o tópico indica, estava aqui a programar e em vez de atribuir um valor manhoso, lembrei-me já que posteriormente facço a verificação se se trata de uma variável "nan", se era possível atribuir este "valor" directamente a uma variável. Ocorreu-me agora uma ideia martelada de double x; x = 10.0/0; mas não sei se isto funciona, e mesmo que funcione gostava de saber se existe alguma forma mais correcta? Agradecido a todos.
KTachyon Posted May 24, 2012 at 04:24 PM Report #457913 Posted May 24, 2012 at 04:24 PM Sabes que saber se isso funciona é tão fácil como experimentar. Isso dá infinito. Mas podes obter NaN dividindo zero por zero. Se, quando imprimes o valor te dá infinito, podes comparar da seguinte forma: if (x - x != 0.0) printf("infinito"); Para verificares se é NaN: if (x != x) printf("não é um número"); “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
pmg Posted May 24, 2012 at 05:18 PM Report #457930 Posted May 24, 2012 at 05:18 PM (edited) O Standard C99 tem a macro isnan() (definida em <math.h>) que eventualmente podes usar para detectar se um numero é "not a number". Ainda em C99 existem as funcoes #include <math.h> double nan(const char *tagp); float nanf(const char *tagp); long double nanl(const char *tagp); que devolvem nans do tipo especificado (ou zero se a implementacao nao suportar nans). Ou ainda para meteres um NAN numa variavel; se o teu compilador for o gcc e nao te importares em usar coisas nao portavies, podes usar a macro NAN. E ainda, le o ponto 14.9 da FAQ do comp.lang.c. Edited May 24, 2012 at 05:22 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Dr_Lion Posted May 24, 2012 at 08:13 PM Author Report #457971 Posted May 24, 2012 at 08:13 PM Era mesmo isto que estava á procura, eu uso de facto o gcc, e para verificar se era nan, usei a macro isnan() como o pmg diz. Realmente baralhei-me, 10/0 é infinito e não nan, até porque têm codificações diferentes no formato de virgula flutuante. Então para a atribuição do nan acho que vou escolher o 0./0. ao invés do sqrt(-1); A nível de complexidade computacional, apenas por curiosidade, qual será o mais complexo? eu pensaria que fosse a raiz quadrada, mas dado que ambos vão dar "erro" não sei se a complexidade se manterá a mesma.
pmg Posted May 24, 2012 at 09:18 PM Report #457987 Posted May 24, 2012 at 09:18 PM Então para a atribuição do nan acho que vou escolher o 0./0. ao invés do sqrt(-1); A nível de complexidade computacional, apenas por curiosidade, qual será o mais complexo? A complexidade computacional deve ter efeito apenas durante a compilacao. O codigo compilado tera o equivalente a var = 42; ... e se estas preocupado com a performance do compilador ganhas muito mais com, por exemplo, a remocao de comentarios do codigo; ou seja: nao te preocupes 🙂 What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Dr_Lion Posted May 25, 2012 at 10:55 AM Author Report #458062 Posted May 25, 2012 at 10:55 AM Ok, não me tinha ocorrido essa ideia, mas realmente parece-me que tens razão é capaz de ser tratado no processo de compilação. Obrigado a todos pela ajuda.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now