Em C ++ O resultado de pow (0, 0) , o resultado é basicamente implementação comportamento definido desde matematicamente temos uma situação contraditória em que N^0
deve ser sempre 1
, mas 0^N
deve ser sempre 0
para N > 0
, então você não deve ter expectativas matematicamente quanto ao resultado deste quer. Esta postagem do fórum do Wolfram Alpha dá mais detalhes.
Embora ter pow(0,0)
resultado em 1
seja útil para muitas aplicações, como a justificativa para o padrão internacional - linguagens de programação - C afirma na seção que cobre o suporte aritmético de ponto flutuante IEC 60559 :
Geralmente, C99 evita um resultado NaN onde um valor numérico é útil. [...] Os resultados de pow (∞, 0) e pow (0,0) são ambos 1, porque existem aplicativos que podem explorar esta definição. Por exemplo, se x (p) e y (p) são quaisquer funções analíticas que se tornam zero em p = a, então pow (x, y), que é igual a exp (y * log (x)), se aproxima de 1 conforme p se aproxima uma.
Atualizar C ++
Como leemes corretamente apontou, eu originalmente vinculei à referência para a versão complexa de pow enquanto a versão não complexa afirma que é um erro de domínio, o esboço do padrão C ++ volta ao esboço do padrão C e ambos C99 e C11 na seção 7.12.7.4
O parágrafo das funções pow 2 diz ( ênfase minha ):
[...] Um erro de domínio Pode ocorrer se x for zero ey for zero. [...]
que, tanto quanto eu posso dizer meio deste comportamento é o comportamento não especificado liquidação de volta uma seção pouco7.12.1
Tratamento de condições de erro diz:
[...] um erro de domínio ocorre se um argumento de entrada está fora do domínio sobre o qual a função matemática é definida. [...] Em um erro de domínio, a função retorna um valor definido pela implementação; se a expressão inteira math_errhandling & MATH_ERRNO for diferente de zero, a expressão inteira errno adquire o valor EDOM; [...]
Portanto, se houvesse um erro de domínio , esse seria o comportamento definido pela implementação, mas em ambas as versões mais recentes de gcc
e clang
o valor de errno
é, 0
portanto, não é um erro de domínio para esses compiladores.
Atualizar Javascript
Para Javascript, a Especificação da Linguagem ECMAScript® na seção 15.8
O Objeto Matemático sob 15.8.2.13
pow (x, y) diz, entre outras condições:
Se y for +0, o resultado será 1, mesmo se x for NaN.