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

Assembleur Discussion :

Comment faire une division par 5 avec les decalages


Sujet :

Assembleur

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comment faire une division par 5 avec les decalages
    Bjr,

    Je suis debutant en assembleur, je voudrais connaitre l'algo pour faire des divisions avec un diviseur non multiple de 2, en utilisant les decalages.

    Merci de votre aidre.

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Tu ne peux pas faire de division directement par 5 avec les décalages ; soit tu divises par 4 puis une autre division soit utiliser une instruction spécifique DIV

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279

  4. #4
    Membre averti
    Avatar de VBurel
    Profil pro
    Développeur Indépendant
    Inscrit en
    Août 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Indépendant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 121
    Points : 356
    Points
    356
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mat.M
    Tu ne peux pas faire de division directement par 5 avec les décalages ; soit tu divises par 4 puis une autre division soit utiliser une instruction spécifique DIV
    après ca dépend de la précision qu'on veut, l'optimization classique de la division entière c'est la multiplication/décalage. on multiplie par un entier, représentant un fraction du décalage, exemple si le décalage est 1024 = 10bit, alors on a notre m=1024/diviseur. dans notre cas m=1024/5 = 204

    Donc la division par 5 peut se coder par un multiplication entière (par 'm'=204) et un décalage (ici >>10).

    Pour la beauté de la chose, on peut trouver des méthode de division par 5 par décalage uniquement.

    Exemple : on remarque que A/5 = A/4 - A/20
    or A/20 = A/(4*5) = (A/4)/5... la récursion s'impose :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    long dividBy5(long value)
    {
       if (value<5) return 0;
       value=value>>2;
       return value-dividBy5(value);
     
    }
    évidemment on peut faire une version itérative...

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Salut,
    c'est juste pour dire une débilité: si on fait un décalage d'un chiffre sur un nombre en base 2, ça équivaut à une division par 2, en base 10 à une division par 10 donc fait un décalage d'un chiffre avec un nombre écrit en base 5.

    P.S: j'avai prévenu

  6. #6
    mat.M
    Invité(e)
    Par défaut
    >>vburel

    Oui mais fdiv ,idiv c'est peut-être tout aussi bien.......


    >>gege2061
    comment fais-tu pour passer en base 5 ?

  7. #7
    Membre averti
    Avatar de VBurel
    Profil pro
    Développeur Indépendant
    Inscrit en
    Août 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Indépendant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 121
    Points : 356
    Points
    356
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mat.M
    >>vburel
    Oui mais fdiv ,idiv c'est peut-être tout aussi bien.......
    ben , faut savoir ce qu'on veut, utiliser du DIV ou pas ?... En parlant de cela, il me semble avoir vu que le DIV ou IDIV sur Pentium4 passe dorénavant par le FPU ! ce qui est très bète je trouve... qqn confirme ca !?

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par mat.M
    comment fais-tu pour passer en base 5 ?
    J'ai fais ma part tu boulot, maintenant je vous laisse vous débrouiller

Discussions similaires

  1. Comment faire une balise <html:text> avec valeur dynamique
    Par chriscoolletoubibe dans le forum Struts 1
    Réponses: 13
    Dernier message: 14/05/2007, 22h13
  2. Peut-on faire une totalisation par colonne avec SQL ?
    Par lodan dans le forum Langage SQL
    Réponses: 19
    Dernier message: 02/03/2007, 16h44
  3. Réponses: 5
    Dernier message: 17/07/2006, 18h34
  4. comment faire une division vertical ?
    Par mamiberkof dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 06/04/2006, 16h50
  5. Comment faire une action, par rapport au temps
    Par Happy dans le forum OpenGL
    Réponses: 5
    Dernier message: 12/11/2005, 13h27

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