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

Mathématiques Discussion :

µC 8 bit => optimisation multiplication par 2.833


Sujet :

Mathématiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut µC 8 bit => optimisation multiplication par 2.833
    bonjour,

    Sur un µC 8 bit, je dois faire une multiplication de 2.833 sur un unsigned int.
    Comment faire pour avoir un code optimisé ?

    ... j'ai commencé par faire une multiplication par x2 mais après je ne vois pas comment faire pour le 0.833...

  2. #2
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 78
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Il me semble qu'il manque deux précisions à ta question:
    Les floats sont ils représentés (y-a-t-il un coprocesseur et un jeu d'instructions accessible) ?
    Quelle est la précision voulue ?
    Sinon, on peut toujours:
    définir une représentation des floats sur 4,8,12 octets
    implémenter la division par 10 (routine div)
    implémenter la multiplication par un chiffre (routine mult (c))
    et combiner ces deux routines avec l'addition (routine add)
    Mais je ne pense pas qu'il s'agisse d'une optimisation.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    non les floats ne sont pas representés

    le resultat represente une tension en mV => je veux une précision à 100mV près
    le resultat sera en général compris entre 9000 et 65500 (en dehors de ces plages, la precision peut etre moindre)

    PS : je n'ai jamais travaillé sur des floats donc je ne sais pas trop comment ça se gère...

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    Pas besoin d'implémenter des float si le seul que tu utilises est 2.833.
    2.833 sécrit en binaire : 10.110101010011111...
    Pour la multiplication entière par n, tu vas donc sommer :
    n * 2
    n / 2
    n / 4
    n / 16
    n / 64
    n / 256
    n / 2048
    n / 4096
    n / 8192
    n / 16384
    n / 32768

    L'algorithme ne devrait pas te poser de problème.

  5. #5
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 78
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Citation Envoyé par Ulmo Voir le message
    Pas besoin d'implémenter des float si le seul que tu utilises est 2.833.
    2.833 sécrit en binaire : 10.110101010011111...
    Pour la multiplication entière par n, tu vas donc sommer :
    n * 2
    n / 2
    n / 4
    n / 16
    n / 64
    n / 256
    n / 2048
    n / 4096
    n / 8192
    n / 16384
    n / 32768

    L'algorithme ne devrait pas te poser de problème.
    Ca me parait une excellente idée !
    d'autant plus que les divisions par les puissances de 2 ne sont que des itérations de la division par 2
    On doit donc rester avec 3 routines:
    multiplication par 2 (déjà fait)
    division par 2
    addition
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    ok, merci pour les infos (c'est bete que le compilo ne sache pas faire la convertion tout seul)

  7. #7
    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 Emcy Voir le message
    bonjour,

    Sur un µC 8 bit, je dois faire une multiplication de 2.833 sur un unsigned int.
    Comment faire pour avoir un code optimisé ?

    ... j'ai commencé par faire une multiplication par x2 mais après je ne vois pas comment faire pour le 0.833...
    Tu peux multiplier par 2833 et diviser par 1000. Ou utiliser une autre fraction qui a la précision nécessaire si ton 2.833 est une approximation (par exemple 17/6=2.83333333...) et que tu as des dépassements à craindre.

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

Discussions similaires

  1. optimisation décalage par rapport à multiplication
    Par ft1103 dans le forum Embarqué
    Réponses: 4
    Dernier message: 08/04/2013, 21h30
  2. Optimisation MySQL par division dans plusieurs tables
    Par John_attend dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/01/2008, 12h14
  3. [MySQL] Une simple multiplication par 1000 !
    Par Christophe Charron dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 23/09/2007, 12h34
  4. multiplication par regroupement
    Par Alexandr dans le forum Access
    Réponses: 3
    Dernier message: 28/07/2006, 11h54
  5. Multiplication par décalage de bits
    Par tekman54000 dans le forum Assembleur
    Réponses: 2
    Dernier message: 25/10/2005, 11h35

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