En C ++ El resultado de pow (0, 0) el resultado es básicamente un comportamiento definido por la implementación ya que matemáticamente tenemos una situación contradictoria donde N^0
siempre debería estar 1
pero 0^N
siempre debería ser 0
para N > 0
, por lo que tampoco debería tener expectativas matemáticas en cuanto al resultado de esto. Este Wolfram Alpha mensajes en el foro entra en un poco más de detalles.
Aunque tener un pow(0,0)
resultado en 1
es útil para muchas aplicaciones, ya que la Justificación de la Norma Internacional — Lenguajes de programación — C establece en la sección que cubre el soporte aritmético de coma flotante IEC 60559 :
Generalmente, C99 evita un resultado NaN donde un valor numérico es útil. [...] Los resultados de pow (∞, 0) y pow (0,0) son ambos 1, porque hay aplicaciones que pueden aprovechar esta definición. Por ejemplo, si x (p) y y (p) son funciones analíticas que se vuelven cero en p = a, entonces pow (x, y), que es igual a exp (y * log (x)), se acerca a 1 cuando p se acerca a.
Actualizar C ++
Como leemes señaló correctamente, originalmente me vinculé a la referencia para la versión compleja de pow mientras que la versión no compleja afirma que es un error de dominio, el borrador del estándar C ++ recurre al borrador del estándar C y tanto C99 como C11 en la sección 7.12.7.4
El párrafo de funciones de pow 2 dice ( énfasis mío ):
[...] Puede ocurrir un error de dominio si x es cero e y es cero. [...]
lo que, por lo que puedo decir, significa que este comportamiento es un comportamiento no especificado Rebobinando una sección de bits El 7.12.1
tratamiento de las condiciones de error dice:
[...] ocurre un error de dominio si un argumento de entrada está fuera del dominio sobre el que se define la función matemática. [...] En un error de dominio, la función devuelve un valor definido por la implementación; si la expresión entera math_errhandling & MATH_ERRNO es distinta de cero, la expresión entera errno adquiere el valor EDOM; [...]
Entonces, si hubiera un error de dominio , este sería un comportamiento definido por la implementación, pero tanto en las últimas versiones de gcc
como en clang
el valor de errno
es, 0
por lo que no es un error de dominio para esos compiladores.
Actualizar Javascript
Para Javascript, la Especificación del lenguaje ECMAScript® en la sección 15.8
El objeto matemático bajo 15.8.2.13
pow (x, y) dice, entre otras condiciones, que:
Si y es +0, el resultado es 1, incluso si x es NaN.