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

Bibliothèque standard C Discussion :

underflow / overflow


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Par défaut underflow / overflow
    Bonjour,

    Question toute bête sans doute, mais j'ai par exemple:

    double x,y,z;
    z = x - y;

    comment gérer l'underflow sur z ?

    D'avance merci,
    bv

    (j'utilise MS VisualStudio 2005)

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par me_myself Voir le message
    comment gérer l'underflow sur z ?


    Que veux-tu dire ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Par défaut
    J'ai une DLL écrite en C qui est interfacée à Excel.
    Je transmets donc des 'doubles' vers la DLL où des calculs sont effectués puis renvoyés vers la feuille de calcul.
    Il se trouve que ces calculs génèrent parfois un underflow.


    Merci d'avance
    bv

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    je repete : que veux-tu dire par "underflow" ????????????????????

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Par défaut
    oops sorry...

    une valeur trop proche de zéro, l'exact opposé de l'overflow, nombre trop grand pour la capacité d'un 'double'.

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par me_myself Voir le message
    J'ai une DLL écrite en C qui est interfacée à Excel.

    bv
    "l'underflow" depuis que je fais de l'informatique c'est la première fois que je vosi ça de ma vie.
    Ton problème c'est un problème de format et taille de données différents entre Excel/Visual Basic et le C.
    Aller sur www.codeproject.com ou dans le MSDN il ya une table de différence entre Visual Basic et C/c++

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Par défaut
    rien de bien extraordinaire pourtant.

    je travaille sur un algorithme mathématique d'optimisation. On recherche donc une convergence entre une valeur théorique et une valeur réelle et dans certains cas, elle est très faible.
    La plupart des fonctions comme sqrt par exemple de la librairie math, traitent les exceptions classiques y compris l'underflow, et je voudrais faire de même avec une simple soustraction.

  8. #8
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    bon on commence qa voir plus clair..

    Mais l'expression "underflow" est incomprise....

    Maintenant pour ton probleme :

    je signale que, dans les fichiers d'entetes de la biblotheque standard, tu as le fichier "limits.h", qui definit les valeurs max, min et de detection de chaque type de variable.

    Tu as donc un DBL_EPSILON (ou EPSILON_DBL, je neme souviens plus) qui donne la plus petite variation mesurable entre 2 doubles.

    Vu que c'est de l'ordre de 10^-13 (ou -17), m'etonnerait que pour des finances ce soit ton ordre de grandeur.....

    Donc je ferais simplement une multiplication par 10000, ou quelque chose comme ca, si la valeur est < 1.

    Sinon, si tu veux tester par rapport a zero, tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (a - b) == DBL_EPSILON )
    ce qui equivaut a

    Ou bien, si tu veux tester par rapport a une petite valeur :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define ACCURACY 0.000001
     
    if ( fabs(a-b) <= ACCURACY )

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Par défaut
    Citation Envoyé par me_myself Voir le message
    double x,y,z;
    z = x - y;

    comment gérer l'underflow sur z ?
    Gérer comment? Quelle gestion souhaites-tu? Quel est le contexte?

    Si tu veux dire détecter l'underflow, il faut préciser ce que tu entends par underflow :
    1. quand le résultat mathématique est trop petit, la soustraction donne 0 (implémentation non-IEEE)
    2. quand le résultat mathématique est trop petit, résultat de la soustraction perd en précision relative, sa mantisse est raccourcie (implémentation IEEE)

    Le test a effectuer, dans chaque cas :
    1. x != y && z == 0
    2. z != 0 && fabs(z) < DBL_MIN

Discussions similaires

  1. Overflow ou underflow
    Par jerem721 dans le forum C
    Réponses: 4
    Dernier message: 11/02/2012, 11h30
  2. Réponses: 3
    Dernier message: 16/09/2004, 14h11
  3. [Erreur] buffer overflow
    Par cmoulin dans le forum Administration
    Réponses: 8
    Dernier message: 04/08/2004, 14h36
  4. Stack overflow
    Par portu dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2003, 15h16
  5. [LG]floation point overflow
    Par mikoeur dans le forum Langage
    Réponses: 8
    Dernier message: 10/07/2003, 12h51

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