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 :

[C] multiplication de double


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Par défaut [C] multiplication de double
    Bonjour!

    Voila un code tout bête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    double temp;
    temp = 50715671 * 50715671;
    printf ("%f\n", temp);
    Pourquoi le résultat est négatif?

    La limite d'un double est bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define	DBL_MAX		1.7976931348623157E+308	/* max decimal value of a */

    Merci...

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Hie,

    Oui, mais ton code fait d'abord une multiplication d'entiers, avec débordement, PUIS passe le résultat en double.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par vince3320 Voir le message
    Voila un code tout bête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    double temp;
    temp = 50715671 * 50715671;
    printf ("%f\n", temp);
    Pourquoi le résultat est négatif?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Il faut lire les messages de son compilateur :
     
    -------------- Build: Debug in hello ---------------
     
    [ 50.0%] Compiling: main.c
    [100.0%] Linking console executable: bin\Debug\hello.exe
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:8: warning: integer overflow in expression
    Output size is 18.55 KB
    Process terminated with status 0 (0 minutes, 0 seconds)
    0 errors, 1 warnings
    Ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /* http://emmanuel-delahaye.developpez.com/clib.htm */
    #include "ed/inc/prt.h"
     
    int main (void)
    {
       double a = 50715671 * 50715671;
       double b = 50715671. * 50715671;
     
       PRT_D(a);
       PRT_D(b);
     
       return 0;
    }
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a            = -534935023.00
    b            = 2572079284980241.00
     
    Process returned 0 (0x0)   execution time : 0.025 s
    Press any key to continue.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Par défaut
    oui bien sur!!!

    il fait le calcul en int.
    En rajoutant un bete cast, ca passe bien...

    Merci a vous

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par vince3320 Voir le message
    En rajoutant un bete cast, ca passe bien...
    Pas besoin d'un cast sur un entier pour le transformer en double, il suffit d'écrire directement un double.

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mabu Voir le message
    Pas besoin d'un cast sur un entier pour le transformer en double, il suffit d'écrire directement un double.
    Tu veux dire "si c'est une expression constante entière". Oui, c'est ce que j'ai fais en ajoutant le '.'. Mais si c'est une variable entière, le cast est requis.

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Tu veux dire "si c'est une expression constante entière". Oui, c'est ce que j'ai fais en ajoutant le '.'.
    C'est bien à ça que je faisais allusion.

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

Discussions similaires

  1. [XL-2002] Recherche valeurs multiples (tableau double entrée)
    Par fredifly dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/11/2014, 10h07
  2. [Math]problème multiplication double
    Par xso dans le forum Général Java
    Réponses: 29
    Dernier message: 04/12/2010, 15h04
  3. Optimisation multiplication complexe : problème de retour de valeur en double
    Par Antonin08 dans le forum x86 32-bits / 64-bits
    Réponses: 8
    Dernier message: 06/06/2008, 08h52
  4. Réponses: 9
    Dernier message: 22/06/2006, 10h11
  5. Multiples double combobox indépendantes entre elles ??
    Par exway01 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/03/2006, 09h34

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