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 :

Faire un calcul en double


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut Faire un calcul en double
    Bonjour,

    J'ai besoin de calculer cette valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double a = 1 / (1 + exp(x) )
    Est ce qu'il faut que je cast en double comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double a = (double)1 / ((double)1 + exp(x) )
    Et/ou écrire 1.0 à la place de 1 ?

    Merci

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Heo,

    En principe, ce n'est pas nécessaire, car exp(x) renvoie un double, qui sera donc le type globalement utilisé.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par droggo Voir le message
    Heo,

    En principe, ce n'est pas nécessaire, car exp(x) renvoie un double, qui sera donc le type globalement utilisé.
    faux a cause de la division....

    Le type de la division se determine par le numerateur...

    Par contre, il suffit de mettre un ".0" et ca marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double a = 1.0 / (1.0 + exp(x) )
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    ok, merci

  5. #5
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Le type de la division se determine par le numerateur...
    Non. De toute façon avec les conversions arithmétiques le numérateur sera quand même converti en double, comme le dit droggo.
    :wq

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par souviron34
    Le type de la division se determine par le numerateur...
    souviron34, vous avez tort. Le résultat d'une opération, division ou pas, se détermine par le type le plus prépondérant. Dans le cas d'une affaire entre double et int, c'est double qui le remporte.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    le RESULTAT oui, mais pas forcement l'OPERATION...

    Dans le cas presente par le PO, sans les cast, il y a division entiere...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Fao,
    Citation Envoyé par souviron34 Voir le message
    le RESULTAT oui, mais pas forcement l'OPERATION...

    Dans le cas presente par le PO, sans les cast, il y a division entiere...
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        double a = 1 / (1 + exp(1.0) );
        printf("%f\n",a);
    ==> résultat = 0.268941, ce qui est bien la valeur attendue.
    Si les cons volaient, il ferait nuit à midi.

  9. #9
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par souviron34
    Le RESULTAT oui, mais pas forcément l'OPERATION ...
    Avant que l'évaluation d'une opération ait lieu les deux opérandes sont TOUJOURS préalablement convertis dans le type du résultat. Par exemple dans 1 / 2.0, 1 est tout d'abord converti en 1.0, le résultat est donc 0.5. Ce n'est pas la même chose que (3 / 2) / 2.0 : Dans ce cas (3 / 2) est d'abord évalué (1) puis converti en 1.0 ...

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Melem Voir le message
    Avant que l'évaluation d'une opération ait lieu les deux opérandes sont TOUJOURS préalablement convertis dans le type du résultat.
    Lapsus. Dans le type le plus large des deux opérandes
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Citation Envoyé par Melem Voir le message
    Avant que l'évaluation d'une opération ait lieu les deux opérandes sont TOUJOURS préalablement convertis dans le type du résultat.
    Ce n'est pas le cas pour les opérateurs de décalage, il y a peut-être d'autres exceptions.
    Edit : en fait je ne suis pas sûr que l'opérande de droite n'est pas converti (en plus des conversions automatiques), en tout cas le type du résultat de ces opérateurs-là dépend seulement de l'opérande de gauche.

    Citation Envoyé par Sve@r Voir le message
    Lapsus. Dans le type le plus large des deux opérandes
    Non, par exemple si c'est entre un long et un float et que le long est le plus large les opérandes seront quand même convertis en float.
    :wq

  12. #12
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    dapounet, je faisais bien sûr allusion aux opérateurs arithmétiques. Il est clair que ce n'est pas le cas pour les autres opérateurs : virgule, point, ->, opérateurs de comparaison (==, !=, etc.), opérateur d'affectation (=), etc.

  13. #13
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par Sve@r Voir le message

    Envoyé par Melem
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Avant que l'évaluation d'une opération ait lieu les deux opérandes sont TOUJOURS préalablement convertis dans le type du résultat.
    Lapsus. Dans le type le plus large des deux opérandes
    La formulation de Melem est correcte, bien qu'elle n'apporte pas beaucoup d'informations (en ne précisant pas comment est déterminé le type du résultat)

    Ta formulation est parfois erronnée : par exemple, un unsigned int et un long peuvent, sur certaines configurations, donner un unsigned long qui n'est le type d'aucun des deux opérandes.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire du calcul avec la valeur d'un élément/attribut
    Par camboui dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 03/11/2005, 16h10
  2. [Conversion]Probleme de calcul en double et en floatant
    Par TOPGUN89 dans le forum Général Java
    Réponses: 2
    Dernier message: 18/04/2005, 17h46
  3. Faire des calculs automatiques en JavaScript
    Par yoyot dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/02/2005, 10h31
  4. [VB6][DataReport] Faire un calcul
    Par Jokeur dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 24/07/2003, 16h10
  5. Réponses: 8
    Dernier message: 18/09/2002, 03h20

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