В C++
The result of pow(0, 0)
результатом в основном определяется реализацией поведение, поскольку математически мы имеем противоречивую ситуацию, в которой N^0
всегда должна быть 1
но 0^N
всегда должен быть 0
для N > 0
, так что вы не должны иметь никаких ожиданий математически результату это тоже. Это Wolfram Alpha сообщений на форуме занимает чуть более подробное описание.
Хотя с pow(0,0)
результатом в 1
полезно для многих приложений как Rationale for International Standard—Programming Languages—C состояний в секции покрытие МЭК 60559 арифметики с плавающей точкой поддержки:
Как правило, С99 сторонится результатом NaN, где числовое значение Полезно. [...] Результаты pow (∞, 0) и pow (0,0) равны 1, потому что есть приложения, которые могут использовать это определение. Например, если x (p) и y (p) - любые аналитические функции, которые становятся равными нулю при p = a, то pow (x, y), равная exp (y * log (x)), приближается к 1 по мере приближения p а.
Обновление C++
Как leemes правильно указал, что я изначально связан с ссылкой на версию мощн в комплекс в то время как версия non-complex утверждает, что это ошибка домен по draft C++ standard падает обратно до draft C standard и оба C99 и C11 в разделе 7.12.7.4
Функции POW пункт говорит (курсив мой ).
[...] Ошибка домена может произойти если х равен нулю, а у равен нулю [...]
, который, насколько я могу сказать, означает такое поведение unspecified behavior Обмотка назад немного раздел 7.12.1
Лечение условий ошибок говорит:
[...] ошибка домена возникает, если входной аргумент находится вне домена над , который определен математической функцией. [...] При ошибке домена функция возвращает значение, определенное реализацией; если целочисленное выражение math_errhandling & MATH_ERRNO отличное от нуля, целочисленное выражение errno приобретает значение EDOM; [...]
Так что, если была ошибка домен , то это будет реализация определяется поведение но в обоих последних версиях gcc
и clang
значение errno
является 0
поэтому не ошибка домена для этих компиляторов.
Обновление Javascript
Для JavascriptECMAScript® Language Specification в разделе 15.8
Математика Объект под 15.8.2.13
мощн (х, у) говорит среди других условий, которые:
Если у равно +0, результат равен 1, даже если x является NaN.
@zzzzBov: Под стандартной четкости, "а б = ехр (Ь п (а))", это не определено. Попытка определить его как «предел x-> 0 f (x) g (x)« где «f» и «g» оба имеют пределы нуля, дает неопределенное значение, поскольку оно зависит от вашего выбора функций , (Извинения за искаженные обозначения, я не могу понять, как получить надписи в комментариях). –
@MikeSeymour, да, я знаю, что 0⁰ (использование символов Unicode) не определено, учитывая это определение, однако, если вы читаете мой комментарий, вы должны заметить, что цитата ссылается на «мир математики», а не на любое «стандартное определение», , Это различие, что я изначально ссылался, и вопрос был обновлен, чтобы исправить этот нюанс. – zzzzBov
@AJMansfield Um ... a^0 = 1 для ненулевого a. – Beska