IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

-1.#IND00 Fonction pow


Sujet :

C

  1. #1
    Membre confirmé Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Par défaut -1.#IND00 Fonction pow
    bonsoir tout le monde,
    j'ai un petit problème avec la foction pow de la bibliothèque math.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include<stdio.h>
    #include<math.h>
     
    int main(){
        double a,b,c,k=5;
        a=log(0.031215);
        b=pow(a,0.2);
        printf("%f",b);
        getchar();
        }
    j'ai comme résultat du printf -1.#IND00 ? quelqu'un connait-il la raison ?
    pourtant les paramètres passés a la fonction sont de type double

  2. #2
    Membre confirmé Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Par défaut
    après quelques recherche j'ai découvert que le x passé en paramètre ne doit pas être négatif.
    le problème maintenant c'est comment faire pour levé un nombre négatif a une puissance y.

  3. #3
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonsoir.

    Ma calculatrice me dit que cette opération donne un nombre complexe ≃ 1,037396596 + 0,753712745⋅𝑖.

    If x is negative (including negative infinity), then a domain error occurs, and a NaN (not a number) is returned.
    D'après la doc, la fonction pow devrait retourner une valeur de type NaN dans ce cas, ce qui correspond à l'erreur que tu nous montre.

    D'où proviennent-ils, peut-être sont-ils mal choisis ou viennent d'un mauvais calcul ?

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Je suis nul en math mais à tout hasard :

    a^b.

    En partant de l'hypothèse que b est toujours positif, il suffit peut être juste de faire |a|^b puis ensuite de regarder la parité de b.

    Si b est impair alors le résultat final sera négatif.

    Je me trompe ?

  5. #5
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Je ne vois pas comment un nombre négatif multiplié par lui-même peut provoquer un nombre complexe... enfin bref, implémentation toossa...

    L'algo de gerald est le bon dans tous les cas !

    EDIT : par contre... si ton exposant n'est pas un nombre entier... c'est sûr que ça donnera un NaN et/ou un complexe...
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    En partant de l'hypothèse que b est toujours positif, il suffit peut être juste de faire |a|^b puis ensuite de regarder la parité de b.
    Sauf si l'exposant n'est pas entier. Par exemple (-5)^2,1.

    Dans ce cas, le nombre négatif est considéré comme un complexe dont l'argument vaudrait 180°, soit un demi-tour, ce qui le ramène sur l'axe des réels mais de l'autre côté. Cet argument multiplié par 2,1 donnerait donc 180×2 = 360° ce qui nous ramène au point de départ, + 180×0,1 = 18°.

    Par conséquent, (-5)^2,1 verrait ses deux parties (réelles et imaginaires) être strictement positives, (-5)^2,5 serait purement imaginaire (argument de 90°, donc sur l'axe vertical) et (-5)^2,7 aurait une partie réelle négative et une partie imaginaire positive. Tout cela avec une puissance supérieure ou égale à 2 et inférieure à 3.

    EDIT : par contre... si ton exposant n'est pas un nombre entier... c'est sûr que ça donnera un NaN et/ou un complexe...
    Il me semble que son exposant est rationnel depuis le premier post : b=pow(a,0.2);

  7. #7
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Si le type "double" pouvait gérer les complexes, pas sûr qu'il s'appellerait ainsi...

    Bref, ça fait partie des nombreuses fonctions qui semblent "simples", et qui nécessitent de bien relire la doc
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  8. #8
    Membre Expert Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Par défaut
    Juste pour voir le résultat, j'ai essayé avec la calculatrice de Windows.

    Celle de Windows XP indique une erreur
    Celle de Windows 7 donne un résultat : -1.28229

    Allez savoir pourquoi ...

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par ed73170 Voir le message
    Juste pour voir le résultat, j'ai essayé avec la calculatrice de Windows.

    Celle de Windows XP indique une erreur
    Celle de Windows 7 donne un résultat : -1.28229
    Avec quelles valeurs ?

  10. #10
    Membre Expert Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Par défaut
    Avec celles du début de la discussion : 0.031215 et 0.2

  11. #11
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Citation Envoyé par ed73170 Voir le message
    Avec celles du début de la discussion : 0.031215 et 0.2
    Tu oublies l'étape du logarithme naturel, qui donne un nombre négatif vu que 0.031215 est inférieur à 1.

  12. #12
    Membre Expert Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Par défaut
    Non, je n'oublie rien du tout. La calculatrice Windows 7 me donne :

    Ln(0.031215) = -3.4668565304684296130571171495883

    puis x^y 0.2 = -1.2822927119325252071590278954738

    Il doit y avoir un bug dans la calculatrice car le code en C renvoie bien une erreur.

  13. #13
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par ed73170 Voir le message
    Non, je n'oublie rien du tout. La calculatrice Windows 7 me donne :

    Ln(0.031215) = -3.4668565304684296130571171495883

    puis x^y 0.2 = -1.2822927119325252071590278954738

    Il doit y avoir un bug dans la calculatrice car le code en C renvoie bien une erreur.
    Ça a du sens puisque 1.28229… est exactement le module de ln⁰⋅² 0.031215. La valeur absolue d'un nombre réel pur correspond aussi au module d'un complexe d'argument nul. Reste à savoir pourquoi la calculatrice Windows choisit quand même de le renvoyer dans ce contexte et de surcroît avec un signe qui n'est pas le bon.

    On pourrait poser pas mal d'hypothèses mais il y a des chances qu'elle utilise aujourd'hui des classes toutes faites et que l'une d'entre elles provoque automatiquement un transtypage d'un complexe vers un réel de cette façon. Le programmeur ne l'a probablement pas remarqué.

    Voir http://www.wolframalpha.com/input/?i....031215%29^0.2

  14. #14
    Membre confirmé Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Par défaut
    bref je suis nul en maths j'ai rien compris de ce que vous avez dit.
    donc je conclus que le résultat est un nombre complexe ?

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    x^0.2, c'est comme x^(1/5), ça devrait donner la racine cinquième de x.

    D'après la calculatrice Windows, -1,2822927119325252071590278954738^5 = -3,4668565304684296130571171495887
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par zakimadrid Voir le message
    bref je suis nul en maths j'ai rien compris de ce que vous avez dit.
    donc je conclus que le résultat est un nombre complexe ?
    C'est cela.

    Comme dit au dessus, lorsque tu élèves un nombre à une puissance inférieure à 1, cela revient à faire une racine. La puissance 1÷2, par exemple, est l'équivalent de la racine carrée (ce qui est pratique quand on fait des dérivées et des primitives). Tu ne peux pas faire une racine carrée d'un nombre négatif — en tout cas pas dans le domaine des réels. Par contre, ça reste tout-à-fait possible dans le plan complexe. En outre, la racine cubique d'un nombre négatif (donc puissance 1÷3), elle, est censée être valable.

    Par extension, une puissance rationnelle revient à faire une racine d'une puissance entière. Par exemple : l'expression x^2,5 est équivalente à x^(5÷2), elle-même équivalente à sqrt(x^5).

    Citation Envoyé par Médinoc Voir le message
    D'après la calculatrice Windows, -1,2822927119325252071590278954738^5 = -3,4668565304684296130571171495887
    Attention, ce ne serait vrai que si l'argument de -1.28229… était nul au départ.

  17. #17
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Il n'est pas nul, il est égal à π.

    En gros, si je résume les règles, on a:
    • Toute puissance d'un réel positif est un réel positif (vu que son argument est nul).
    • Pour élever un complexe à n'importe quelle puissance, on élève son module (sa valeur absolue, donc forcément un réel positif) à cette puissance, et on multiplie son argument par celle-ci.
    • Toute puissance entière d'un réel, quels que soient les signes, est un réel (car multiplier 0 ou π par un nombre entier donne forcément un multiple entier de π).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par zakimadrid Voir le message
    bref je suis nul en maths j'ai rien compris de ce que vous avez dit.
    donc je conclus que le résultat est un nombre complexe ?
    C'est cela.

    Une puissance inférieure à 1 est équivalente à une racine. Notamment, la puissance 1÷2 est l'équivalent de la racine carrée (ce qui est pratique lorsque l'on fait des dérivées et des primitives) et par extension, toute puissance rationnelle peut être vue comme une racine d'un nombre élevé à une puissance entière. Par exemple, l'expression x^2,5 est équivalente à x^(5÷2), elle-même équivalente à sqrt(x^5).


    Citation Envoyé par Médinoc Voir le message
    Il n'est pas nul, il est égal à π.
    Hmpff. Oublie ma dernière phrase. C'est moi qui m'emmêle les pinceaux.

  19. #19
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En y réfléchissant, j'ai quand même du mal à comprendre comment -3,4668565304684296130571171495887 ^1/5 peut retourner un réel. Je me serais attendu à ce que l'argument du résultat soit π/5, et non zéro...

    De plus, la calculatrice Windows ne travaille pas en complexe: Si je lui demande sqrt(-1), elle me répond "invalid input", et non ⅈ...

    Edit: La TI-89 en revanche, quand je lui demande 3.46OMGWTFBBQ^0.2, me répond correctement 1.0374 + .753713ⅈ, alias 1.2822927119325*e^(ⅈπ/5).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    OMG ! C'est énorme cette calculatrice !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. probléme avec la fonction pow
    Par arglow dans le forum C
    Réponses: 7
    Dernier message: 23/07/2007, 13h38
  2. erreur syntaxe sur une fonction pow
    Par superyoury dans le forum C
    Réponses: 3
    Dernier message: 10/06/2007, 18h16
  3. int, unsigned int, et la fonction pow
    Par salseropom dans le forum C
    Réponses: 11
    Dernier message: 22/12/2006, 17h53
  4. [Math.h] la fonction 'pow'
    Par fantomasmusic dans le forum C
    Réponses: 3
    Dernier message: 16/10/2006, 13h00
  5. Problème avec la fonction pow(les puissance)
    Par Clément76 dans le forum C
    Réponses: 10
    Dernier message: 04/10/2006, 12h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo