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 :

[Overflow] Test pour la multiplication


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�

    Inscrit en
    Juin 2008
    Messages
    49
    D�tails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 49
    Par d�faut [Overflow] Test pour la multiplication
    Bonjour � tous.

    Je travaille sur une classe d'entiers (positifs uniquement) s�curis�s qui lance des exceptions si la valeur obtenue lors d'une op�ration d�passe la valeur maximale pouvant �tre contenue dans cet entier.

    La question qui me pr�occupe est de savoir comment g�rer les overflows lors d'une multiplication avec un test simple et surtout efficace ?

    Je connais les 2 op�randes ainsi que la valeur maximale que mon type de donn�e peut contenir. Je ne peux �videmment pas effectuer la multiplication et je ne vois aucun test utilisable sur les bits.

    Merci � vous

  2. #2
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Si les op�randes sont R et L et que le maximum est MAX, il y a overflow si R != 0 && MAX/R < L

  3. #3
    Membre confirm�

    Inscrit en
    Juin 2008
    Messages
    49
    D�tails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 49
    Par d�faut
    Mmmmh oui. Mais on a le co�t d'une division.

    J'aurais pr�f�r� quelque chose de plus rapide.

    J'ai regard� dans quelques papiers sur le net et c'est cette solution l� qui est privil�gi�e ou alors l'utilisation du bit d'overflow dans le cas des micro-processeurs. Apperement c'est quand m�me la solution la plus simple.

    Merci

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par d�faut
    a*b > max
    a > max/b si a>=0 et b>=0

    L'in�galit� pr�sent�e est dans le mauvais sens !

    Attention, ce test peu de plus g�n�rer de faux positifs en sous estimant la valeur de la division, ce qui est le comportement normal sur le calcul sur entiers (10/3 donne 3).

  5. #5
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par deadalnix Voir le message
    a*b > max
    a > max/b si a>=0 et b>=0

    L'in�galit� pr�sent�e est dans le mauvais sens !
    Oops, je corrige.

    Attention, ce test peu de plus g�n�rer de faux positifs en sous estimant la valeur de la division, ce qui est le comportement normal sur le calcul sur entiers (10/3 donne 3).
    Je ne suis pas d'accord. Tu aurais des faux positifs si tu determinais la limite en entier pour t'en servir avec des flottant, mais comme tu t'en sers pour des entiers le resultat est correct. Si tu multiplies 3 par 4, tu as bien quelque chose de plus grand que 10.

  6. #6
    Membre �prouv�
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par d�faut
    Les faux positifs sont la en cas de >= comme dans ton exemple .

    Il ne sont en effet plus la dans le mien, mais c'est tout a fait malgr� moi

  7. #7
    Mod�rateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur d'emploi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par d�faut
    Citation Envoy� par Nanoc Voir le message
    J'ai regard� dans quelques papiers sur le net et c'est cette solution l� qui est privil�gi�e ou alors l'utilisation du bit d'overflow dans le cas des micro-processeurs. Apperement c'est quand m�me la solution la plus simple
    La vraie question est : comment le microprocesseur d�termine-t-il la valeur du bit d'overflow ? La r�ponse est plus simple qu'on ne le croit ! :-)

  8. #8
    Membre confirm�

    Inscrit en
    Juin 2008
    Messages
    49
    D�tails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 49
    Par d�faut
    Et quelle est-elle cette r�ponse ?

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    53
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 53
    Par d�faut
    Si c'est en non sign� suffit de regarder si la somme est inf�rieur a une op�rande.. si c'est le cas ... c'est qu'il y a eu de l'overflow...

Discussions similaires

  1. Outils de test pour application WEB ?
    Par elitost dans le forum Outils
    R�ponses: 4
    Dernier message: 16/12/2005, 16h27
  2. [GCC] Tableau de pointeurs pour acc�s multiples en asm
    Par Flo. dans le forum x86 32-bits / 64-bits
    R�ponses: 2
    Dernier message: 12/12/2005, 08h47
  3. XSL - choose et test pour balise vide
    Par enigma dans le forum XSL/XSLT/XPATH
    R�ponses: 3
    Dernier message: 19/07/2005, 08h02
  4. [Choix de langage] POO pour de multiples applications
    Par Shadowritter dans le forum Langages de programmation
    R�ponses: 15
    Dernier message: 17/01/2005, 15h42
  5. [LG]tests pour la gestion d'erreur
    Par le 27 dans le forum Langage
    R�ponses: 3
    Dernier message: 22/12/2003, 20h44

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