Il n'y pas de fonction dans la librairie standard pour faire ce que tu veux à ma connaissance, mais une fonction retournant (dividende + diviseur / 2) / diviseur devrait répondre au besoin je pense.
En pseudo-assembleur: load A,(nombre) load B,(diviseur) lshift,A,1 décaler A de un vers la gauche add A,B ajouter B à A lshift B,1 div A=A/B diviser A par B Je pense que les compilateurs optimisent la multiplication par 2 par un décalage de 1 vers la gauche. Sinon, tu peux écrire numerateur <<= 1; Dans ton code comme le mien, on doit faire une division. C'est en général l'instruction la plus longue. Tu fais un test et un masque que je ne fais pas.
Le Tout est souvent plus grand que la somme de ses parties.
oui PierrotLeFou , votre solution semble effectivement plus optimale en nombre d'opération.
Je préfère aussi l'opérateur << pour la multiplication par 2, on est pas sûr du comportement du compilateur.
Et même si en fait le microcontroleur mega 2560 que j'utilise, à ma grande surprise est capable de faire une multiplication en un seul cycle (sur 8 bits).
Il est certain que le compilateur va optimiser une division par 2. C'est trivial pour lui. A mon avis la solution que je t'ai donnée est plus optimale (un bitshift en moins).
@SpaceIn: J'ai testé expérimentalement ta formule vs la mienne. Les deux donnent le même résultat pour 1 <= nombre <= 1000 et 1 <= diviseur <= nombre/2 Donc, effectivement ta formule est plus efficace
Le Tout est souvent plus grand que la somme de ses parties.
J'avais un doute d'une éventuelle perte de précision en faisant diviseur / 2 ( ou diviseur >> 1 ).
J'ai essayé sur papier de trouver des cas critiques avec un diviseur impair, je n'en ai pas trouvé.
Effectivement c'est une meilleur formule, je vous remercie.
Arrondi au plus proche sans utiliser de float
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.