Bonjour,
Une question d'optimisation. Je ne sais pas d'ailleurs si je suis dans le bon forum.
En travaillant sur des floats et dans une machine lambda, est-il plus rapide de diviser par 2 ou de multiplier par 0.5 ?
Merci
Bonjour,
Une question d'optimisation. Je ne sais pas d'ailleurs si je suis dans le bon forum.
En travaillant sur des floats et dans une machine lambda, est-il plus rapide de diviser par 2 ou de multiplier par 0.5 ?
Merci
Bonjour,
je dirais peu importe (surtout si la machine est quelconque et qu'on ne peut rien supposer sur son architecture). L'important est d'avoir un compilateur qui lorsqu'on lui demandera d'optimiser la sortie produira un code optimisé pour la machine en prenant en compte non seulement la division mais aussi les autres opérations effectuées avant et après, ...
Bonjour,
Aujourd'hui, ça revient exactement au même parce que le compilateur va choisir de lui-même l'option la plus efficace.
Ensuite, « 2 » et « 0,5 » correspondent respectivement à 2¹ et 2⁻¹. Ça veut dire qu'en représentation IEEE 754 (les float et double que tu connais), ils ont tous les deux la même mantisse et que cette mantisse est vide (le premier « 1 » est implicite) et qu'on peut donc facilement transformer la division en multiplication.
Avec cela, pour ainsi dire toutes les machines sont équipées de coprocesseurs mathématiques travaillant directement en virgule flottante. Le calcul n'est pas instantané pour autant, mais il n'est plus à la charge du micro-processeur mais à celle d'une circuiterie électroniquement câblée pour cet usage.
Si tu travailles sur de vieilles machines (les huit bits) ou sur des micro-contrôleurs, la question est un peu plus pertinente car ces architectures disposent en général d'une instruction pour faire une multiplication entière mais pas de division (plus compliquée). On est alors obligé de travailler bit à bit sur la mantisse à diviser et l'algorithme en ressort sensiblement ralenti mais cela n'est perceptible que si tu travailles sur une très grande quantité de nombres.
Enfin, « 2 » et « 0,5 » en particulier sont des puissances de deux et dans ce cas, il suffit d'incrémenter ou de décrémenter, respectivement, l'exposant pour obtenir le résultat et ces deux opérations sont donc strictement équivalentes en termes de consommation mémoire et de temps d'exécution.
(ÉDIT: trop tard).
Sinon en parlant d'optimisation, il parait que les floats c'est pas le type le plus rapide (bruit de couloir que j'ai entendu de chez les programmeurs ). Si jamais tu as la possibilité de les échanger c'est toujours ça de gagné.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager