En C ++ Le résultat de pow (0, 0) le résultat est fondamentalement un comportement défini par l'implémentation puisque mathématiquement nous avons une situation contradictoire où N^0
devrait toujours être 1
mais 0^N
devrait toujours être 0
pour N > 0
, donc vous ne devriez pas non plus avoir d'attentes mathématiques quant au résultat de ceci. Ce message du forum Wolfram Alpha donne un peu plus de détails.
Bien que le pow(0,0)
résultat en 1
soit utile pour de nombreuses applications, comme l' indique la justification de la Norme internationale - Langages de programmation - C dans la section traitant de la prise en charge arithmétique à virgule flottante CEI 60559 :
Généralement, C99 évite un résultat NaN où une valeur numérique est utile. [...] Les résultats de pow (∞, 0) et pow (0,0) sont tous deux 1, car il existe des applications qui peuvent exploiter cette définition. Par exemple, si x (p) et y (p) sont des fonctions analytiques qui deviennent nulles à p = a, alors pow (x, y), qui est égal à exp (y * log (x)), s'approche de 1 lorsque p approche une.
Mettre à jour C ++
Comme leemes l'a correctement souligné, j'ai initialement lié à la référence pour la version complexe de pow tandis que la version non complexe prétend qu'il s'agit d'une erreur de domaine, le projet de norme C ++ revient au projet de norme C et à la fois C99 et C11 dans la section7.12.7.4
Le paragraphe des fonctions pow 2 dit (c'est moi qui souligne ):
[...] Une erreur de domaine peut se produire si x est zéro et y est zéro. [...]
ce qui, pour autant que je sache, signifie que ce comportement est un comportement non spécifié Remonter un peu la section 7.12.1
Traitement des conditions d'erreur dit:
[...] une erreur de domaine se produit si un argument d'entrée est en dehors du domaine sur lequel la fonction mathématique est définie. [...] En cas d'erreur de domaine, la fonction renvoie une valeur définie par l'implémentation; si l'expression entière math_errhandling & MATH_ERRNO est différente de zéro, l'expression entière errno acquiert la valeur EDOM; [...]
Donc, s'il y avait une erreur de domaine, il s'agirait d'un comportement défini par l'implémentation, mais dans les deux dernières versions de gcc
et clang
la valeur de errno
est 0
donc ce n'est pas une erreur de domaine pour ces compilateurs.
Mettre à jour Javascript
Pour Javascript, la spécification du langage ECMAScript® dans la section 15.8
L'objet mathématique sous 15.8.2.13
pow (x, y) dit entre autres conditions que:
Si y est +0, le résultat est 1, même si x est NaN.