Maison > développement back-end > C++ > La division en virgule flottante est-elle vraiment plus lente que la multiplication dans les processeurs modernes ?

La division en virgule flottante est-elle vraiment plus lente que la multiplication dans les processeurs modernes ?

Barbara Streisand
Libérer: 2024-12-21 13:09:09
original
470 Les gens l'ont consulté

Is Floating-Point Division Really Slower Than Multiplication in Modern CPUs?

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;
Copier après la connexion

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
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal