Comme il s'agit de CS et non de Stackoverflow, je vais supposer que vous posez une question sur l'analyse numérique, et (pour simplifier les choses) en virgule flottante IEEE-754 en particulier. Dans ce cas, la réponse à votre question dépend en partie de ce que vous entendez par «plus facile» et en partie des détails du système.
Aucun processeur moderne que je connaisse n'a une instruction intégrée qui fait exactement ce que vous attendez soit pour l' opération (que nous appellerons désormais , son nom habituel en C) ou 2 x ( ). Ils sont tous deux implémentés à l'aide de fonctions de bibliothèque.eXexp
2Xexp2
Comme c'est le cas avec toutes les méthodes numériques pour les opérations transcendantales, il y a quelques cas particuliers à considérer:
exp(NaN) = NaN
exp(+Inf) = +Inf
exp(-Inf) = 0
Cependant, il y a une autre chose qui rend le problème un peu moins compliqué: le domaine utile est assez petit. Pour binary32, exp(x)
débordements si environ et débordements si x > 88,7 environ. Exceptionnellement pour les opérations transcendantales, nous pouvons également ignorer le cas subnormal, car il est impossible de le distinguer de if est subnormal. Tout ce qui précède est également vrai pour , sauf que le domaine est légèrement différent.x < - 104x > 88,7exp(x)
1.0
x
exp2
Votre intuition a raison dans la mesure où la plupart des implémentations calculent . Cependant, le coût de cette multiplication par 1eX= 2x / ln2 est trivial par rapport au reste de l'informatique. Une méthode typique utilise une table précalculée avecKéléments:1ln2exp2
K
exp2 (x)= 2n× T[ j ] × P( y)
où est la partie entière de x , le tableau T contient des valeurs de 2 j / K pour tout j dans la plage [ 0 , K ) , et P est une approximation polynomiale à 2 x (la quartique est suffisante pour binaire32) dans la plage [ 0 , 1nXT2j / Kj[ 0 , K)P2X. Lapartie2nest bon marché, car elle ne fait que manipuler l'exposant. Test une table de recherche. AlorsPest susceptible d'être la partie coûteuse de l'opération.[ 0 , 1K)2nTP
Je dois souligner par souci d'exhaustivité que les FPU Intel x86 incluent une instruction appelée f2xm1
, qui calcule pour x dans la plage [ - 1 , 1 ] . Cependant, sur un processeur moderne, il s'agit d'une instruction assez coûteuse et non canalisée, et vous êtes fortement découragé de l'utiliser. Comme l' indique à juste titre la section 3.8.5 du manuel de référence sur l'optimisation Intel :2X- 1X[ - 1 , 1 ]
Bien que x87 prenne en charge les instructions transcendantales, la mise en œuvre de la bibliothèque logicielle de la fonction transcendantale peut être plus rapide dans de nombreux cas.
Edit: Il a été souligné dans les commentaires que je devrais expliquer une partie de la nouvelle terminologie utilisée dans IEEE 754-2008. Une partie du langage a changé depuis 1985 et 1987, et la plupart des gens connaissent beaucoup mieux l'ancien jargon.
Les termes "binary32" et "binary64" sont les nouveaux noms des nombres binaires à virgule flottante 32 bits et 64 bits, que l'ancien standard appelait respectivement "simple" et "double".
Le terme «nombre sous-normal» remplace le terme précédent «nombre dénormal» ou «nombre dénormalisé» .