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 :

int , float , double ?


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut int , float , double ?
    bonjour tout le monde, j’espère que vous allez bien
    en fait j'ai besoin de stocker un nombre qui est très grand dans une variable, et je me demande quel type choisir ?

    j'ai essayé avec le type Double , mais je n'ai pas pu dépasser 17 chiffres, si je tape 18 chiffre (123456789123456789) par exemple, quand j'affiche le résultat est (123456789123456780) donc les chiffres faible poids deviennent des '0' ...

    je n'ai pas compris comment ça fonctionne , pouvez vous m'aider?

  2. #2
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Bonjour,

    réponse hyper rapide : tous les types numériques de base ont une précision limitée donc si tu dépasses ces limites il va falloir te tourner vers une bibliothèque qui gère des nombre en précision arbitraire. Il en existe plusieurs par exemple GMP.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    merci kwariz pour votre réponse hyper rapide , mais est ce que vous pouvez m'expliquer comment utiliser cette bibliothèque , quel types utiliser et comment les manipuler (lire , écrire) ...

  4. #4
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Il faut d'abord que tu vérifies que cette bibliothèque est supportée par ton OS (normalement c'est ok), ensuite il va falloir que tu l'installes avant de pouvoir l'utiliser .
    Pour l'utilisation de cette bibliothèque malheureusement il va falloir lire la doc et chercher des tutos.

    Un exemple simple que j'ai rapidement construit en consultant la doc : (nomme ce fichier gmp_test.c)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include <stdio.h>
    #include <gmp.h>
     
    int main(void)
    {
      mpz_t entier; // mpz_t est le nom des entiers                                                                                                 
      mpz_t entierX2;
     
      // on initialise un entier avec un nombre de 40 chiffres en base 10                                                                           
      mpz_init_set_str(entier, "12345678901234567890123456789012345678901234567890", 10);
     
      // on initialise simplement et entierX2 contiendra 0                                                                                          
      mpz_init(entierX2);
     
      // on affiche entier avec le printf proposé par la bibliothèque GMP                                                                           
      gmp_printf("Un très grand nombre : '%Zd'\n", entier);
     
      // on va calculer le double de cet entier ...                                                                                                 
      mpz_add(entierX2, entier, entier);
     
      // On l'afficher aussi                                                                                                                        
      gmp_printf("Son double           : '%Zd'\n", entierX2);
     
      // Il faudra penser à libérer les nombres utilisés                                                                                            
      mpz_clear(entier);
      mpz_clear(entierX2);
     
      return 0;
    }
    La commande pour compiler et le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > gcc -Wall -Wextra -o gmp_test gmp_test.c -lgmp
    ~/Projects/gmp> ./gmp_test 
    Un très grand nombre : '12345678901234567890123456789012345678901234567890'
    Son double           : '24691357802469135780246913578024691357802469135780'

  5. #5
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Si tu n'as pas besoin d'effectuer de calcul sur ces nombres (sait-on jamais...), tu peux te contenter de les stocker dans des char* (ce que font -en quelques sortes- toutes les bibliothèques permettant de dépasser les limites des types fournis par l'OS).

Discussions similaires

  1. [Conversion]int to double
    Par frouge dans le forum Général Java
    Réponses: 6
    Dernier message: 03/02/2012, 09h34
  2. tri sur std::vector<std::pair<int, float> >
    Par b4u dans le forum SL & STL
    Réponses: 15
    Dernier message: 01/10/2006, 09h19
  3. [Float || Double] positionement d'un point et precision
    Par TabrisLeFol dans le forum Langage
    Réponses: 5
    Dernier message: 29/06/2006, 09h56
  4. int vs double: qui est le plus rapide?
    Par Chewbi dans le forum C++
    Réponses: 23
    Dernier message: 25/03/2006, 02h58
  5. type d'un char* ? int, float .... ?
    Par stitch dans le forum C
    Réponses: 5
    Dernier message: 08/03/2006, 16h27

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