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 :

Question sur les valeur min et max des types ?


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut Question sur les valeur min et max des types ?
    Bonjour j'aimerai savoir quelle est la valeur min et max pour un
    ex:
    type min max
    short 32767 -32768
    int 2147483647 -2147483648
    long long ?
    float ?
    double ?
    long double ?

    C'est tout bête mais je m'en souvient jamais.
    Je suis sous windows est ce que sous linux c'est pareil?
    Merci d'avance pour vos réponse.

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    octobre 2004
    Messages
    11 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : octobre 2004
    Messages : 11 511
    Points : 29 908
    Points
    29 908
    Par défaut
    Salut,

    Il est déconseillé de se baser sur des valeurs précises car elles ne sont que le reflet du nombre de bit qui constituent réellement le type envisagé.

    Or, il faut savoir que:

    1- le nombre de bit dont est composé un byte n'est déjà pas partout identique
    2- la seule garantie que la norme donne en ce qui concerne les types, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( unsinged ) char <= ( unsinged ) short <= ( unsinged ) int <= ( unsinged ) long <= ( unsinged ) long long /* si utilisé */
    Comme, en plus, il y a pour l'instant (au niveau des pc, mais c'est très loin d'être les seuls systèmes utilisés) des architectures 32 et 64 bits, il devient réellement difficile de préjuger des différentes valeurs admises

    C'est pourquoi, le mieux est encore d'utiliser numeric_limits<type_a_tester>::min() et numeric_limits<type_a_tester>::max(), disponible dans l'espace de noms std par inclusion du fichier d'en-tête <limits>

    Non seulement, tu ne devra plus t'inquiéter de retenir les différentes valeurs (d'autant plus que tu n'a pas tenu compte du fait qu'il sont signé ou non), mais en plus, tu aura la certitude que, quoi qu'il arrive, les valeurs seront correctes sur n'importe quelle plateforme

    Dans la même veine, tu dispose d'une fonction epsilon dans la classe numeric_limits qui te permet de connaitre la précision maximale admise par les types décimaux.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut Inclusion
    J'ai une autre question j'essaye d'inclure un double dans un long comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    double fValue  =  std::numeric_limits<double>::max();
    long lValue = (long) fValue;
    A la compile pas erreur par contre à l'exécution boum pastèque. Normalement je ne dépasse pas la valeur que me donne std::numeric_limits<long>::max();

    Merci d'avance et merci pour ta super réponse détaillé qui réponds à pas mal de mes questions.

  4. #4
    adundev
    Invité(e)
    Par défaut
    Le double n'est pas constitué du même nombre d'octet que le type long int.
    Par exemple chez moi le type long est défini sur 4 octets tandis que le type double est sur 8 octets.
    Cela explique ton résultat.

    De plus en C++ si tu utilises le cast à la manière C comme tu l'as fait :
    il se peut que tu ais un "warning" car tu effectue un cast qui implique une perte de données (= les décimales)

    En C++ on préfèrera utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static_cast<type>(maVariable)
    qui ne produira pas de warning

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    Merci.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/08/2012, 16h00
  2. question sur les valeurs hexadecimal
    Par Ganondorf dans le forum Débuter
    Réponses: 13
    Dernier message: 24/09/2010, 18h15
  3. Question sur les valeurs de SrcBlock et DstBlock
    Par Sensib dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/10/2006, 12h56
  4. Affectation de la valeur min et max des axes d'un graphe
    Par marsupilami34 dans le forum Access
    Réponses: 2
    Dernier message: 04/09/2006, 15h55
  5. question sur les valeurs de retour
    Par arasium dans le forum Langage
    Réponses: 10
    Dernier message: 24/07/2006, 17h47

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