Maison >développement back-end >C++ >La division en virgule flottante est-elle vraiment plus lente que la multiplication dans les processeurs modernes ?
Implications sur les performances de la division à virgule flottante par rapport à la multiplication
Il a été déclaré que les divisions à virgule flottante sont plus lentes en termes de calcul que les multiplications. Cet article approfondit cette affirmation et examine sa validité dans l'architecture PC moderne.
La division dans les opérations à virgule flottante dépasse souvent la multiplication en termes de complexité temporelle. Les processeurs exécutent généralement la multiplication dans un délai de 1 à 2 cycles d'horloge, tandis que la division nécessite un processus plus long.
Pour illustrer l'écart de performances, considérez les extraits de code suivants :
float f1 = 200f / 2; // vs. float f2 = 200f * 0.5;
Dans de nombreux cas, f2 sera calculé plus rapidement en raison de l'efficacité inhérente de la multiplication par rapport à la division.
Cette distinction de performances se manifeste également dans des opérations plus complexes. Par exemple, la boucle suivante :
float f1; float f2 = 2; float f3 = 3; for(i = 0; i < 1e8; i++) { f1 = (i * f2 + i / f3) * 0.5; //or divide by 2.0f, respectively }
s'exécutera plus efficacement en utilisant la multiplication par 0,5 au lieu de la division par 2,0f, car la division nécessite des étapes itératives.
La différence de performances significative provient de complexités architecturales de la division. Contrairement à la multiplication, qui peut être parallélisée en la convertissant en additions multiples, la division implique une soustraction itérative, une opération moins parallélisable. Pour compenser, certaines unités à virgule flottante utilisent des approximations et des multiplications réciproques, sacrifiant une certaine précision au profit de l'efficacité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!