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...
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...
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...)
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...
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.
Ce qu'on trouve est plus important que ce qu'on cherche.
Maths de base pour les nuls (et les autres...)
ok, merci pour les infos (c'est bete que le compilo ne sache pas faire la convertion tout seul)
Partager