W C ++ wynikiem pow (0, 0), wynik jest w zasadzie realizacja zdefiniowane zachowanie ponieważ matematycznie mamy sprzeczne sytuacji, w której N^0
powinien być zawsze 1
, ale 0^N
zawsze powinien być 0
za N > 0
, więc nie powinno być żadnych oczekiwań matematycznie co do wyniku tego obaj. Ten post na forum Wolfram Alpha zawiera nieco więcej szczegółów.
Chociaż uzyskanie pow(0,0)
wyniku 1
jest przydatne w wielu aplikacjach, ponieważ uzasadnienie dla normy międzynarodowej - języki programowania - stwierdza C w sekcji dotyczącej obsługi arytmetyki zmiennoprzecinkowej normy IEC 60559 :
Ogólnie C99 unika wyniku NaN, gdy przydatna jest wartość liczbowa. [...] Wyniki pow (∞, 0) i pow (0,0) wynoszą 1, ponieważ istnieją aplikacje, które mogą wykorzystywać tę definicję. Na przykład, jeśli x (p) i y (p) są dowolnymi funkcjami analitycznymi, które stają się zerowe przy p = a, to pow (x, y), które jest równe exp (y * log (x)), zbliża się do 1, gdy p zbliża się za.
Zaktualizuj C ++
Jak leemes prawidłowo wskazał, że pierwotnie związany z odniesieniem do złożonej wersji pow natomiast zakaz złożonych roszczeń wersji jest to błąd domeny projekt C średnia ++ wraca do normy projekt C i zarówno C99 i C11 w sekcji 7.12.7.4
Funkcje pow ustęp 2 mówi ( podkreślenie moje ):
[...] Błąd domeny może wystąpić, jeśli x wynosi zero, a y wynosi zero. [...]
co, o ile wiem, oznacza, że to zachowanie jest zachowaniem nieokreślonym. Wycofanie sekcji nieco w sekcji 7.12.1
Traktowanie warunków błędu mówi:
[...] błąd domeny występuje, jeśli argument wejściowy znajduje się poza dziedziną, w której zdefiniowano funkcję matematyczną. [...] W przypadku błędu domeny funkcja zwraca wartość zdefiniowaną w ramach implementacji; jeśli wyrażenie całkowite math_errhandling & MATH_ERRNO jest niezerowe, wyrażenie całkowite errno uzyskuje wartość EDOM; […]
Jeśli więc wystąpił błąd domeny, byłoby to zachowanie zdefiniowane w ramach implementacji, ale zarówno w najnowszych wersjach, jak gcc
i clang
wartość errno
jest 0
taka, więc nie jest to błąd domeny dla tych kompilatorów.
Zaktualizuj Javascript
Dla JavaScript ECMAScript® Language Specification w punkcie 15.8
obiektu Math pod 15.8.2.13
pow (x, y) , mówi między innymi warunkami, że:
Jeśli y wynosi +0, wynikiem jest 1, nawet jeśli x wynosi NaN.