|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Membre à l'essai
![]() Thomas ChauveÉtudiant Inscription : décembre 2012 Messages : 25 ![]() |
bonjour,
j'ai une problème lors de l'écriture d'un programme, je souhaite réalisé x^a, cela marche pour x positif mais ne marche pas pour x négatif sortie 'NaN'? Ligne 30 du programme je sort x et x^expo et pour les valeur négative de x, x^expo est 'NaN' Toute mes real sont déclaré en double précision, et j utilise le compilateur gfortran. Code :
parameter.data Code :
Code :
Code :
|
||||||||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : août 2006 Messages : 781 ![]() |
Ça ne marche pas car c'est ce que dit la norme. Un réel négatif à un exposant réel est illégal. Certains compilateurs acceptent tout de même d'effectuer le calcul si l'exposant réel correspond à un entier (ex: 2.0).
Pourquoi ? Tu essayeras de tracer la courbe -2^x pour x < 0... |
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Thomas ChauveÉtudiant Inscription : décembre 2012 Messages : 25 ![]() |
je ne suis pas sur que cela vienne de ca car dans le petit programme cela ne pose pas de soucie
de plus ici x^a ou 'a' est real positif |
|
|
00
|
|
|
#4 | ||
|
Membre habitué
![]() Inscription : mai 2010 Messages : 111 ![]() |
Salut !
Pourquoi ne pas rajouter une condition logique du type : Code :
|
||
|
|
00
|
|
|
#5 | ||
|
Membre à l'essai
![]() Thomas ChauveÉtudiant Inscription : décembre 2012 Messages : 25 ![]() |
Le problème n'est pas a négatif mais pour x négatif ! x^a dans mon problème 'a' a une valeur fixe 29/4 mais que je définie comme un réel et pas un rationelle.
j'ai plus ou moins contournez le problème avec Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : mai 2010 Messages : 111 ![]() |
Re-salut,
Ok, j'avais mal compris la question. Le problème ici est que tu cherches à calculer avec un exposant non entier --> une racine (tordue certes, mais une racine quand même). Or, une racine ne peut jamais être négative dans l'espace réel. En somme, si tu écris (-X)**(29/4), ou bien X**(29/4) avec X<0, tu calcules une racine de nature complexe et non pas réelle. De fait, dans ton code, il va être nécessaire d'isoler le signe de X via quelque chose comme : Et là ça devrait marcher. En espérant avoir répondu à ta question cette fois ci, Marlan |
|
|
00
|
|
|
#7 | ||||
|
Membre à l'essai
![]() Thomas ChauveÉtudiant Inscription : décembre 2012 Messages : 25 ![]() |
oui je suis d'accord c'est ce que j'ai fait pour mon programme donc c'est ok,... mais la question que je me pose c'est pourquoi lorsque j’écris cela le programme donne un résultat et pas NaN
Code :
Code :
|
||||
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : mai 2010 Messages : 111 ![]() |
En fait la raison est est une raison de syntaxe :
Lorsque tu fais -729.123**(4.75) le code lit directement : -(729.123)**(4.75) Alors que si tu stockais cette valeur dans une variable, par exemple X: X=-729.123 print*,X**(4.75) Alors le code lit : (X)**(4.75) Soit : (-729.123)**(4.75) |
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Thomas ChauveÉtudiant Inscription : décembre 2012 Messages : 25 ![]() |
ok merci j'ai compris
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com