В C++ результат pow(0, 0) результат в основном поведение, определяемое реализацией, поскольку математически у нас есть противоречивая ситуация, когда N^0
всегда должно быть 1
, а 0^N
всегда должно быть 0
для N > 0
, поэтому у вас не должно быть никаких математических ожиданий относительно результата этого. В этих сообщениях на форуме Wolfram Alpha содержится более подробная информация.
Хотя результат pow(0,0)
в 1
полезен для многих приложений, так как Обоснование для международного стандарта — Языки программирования — в разделе, посвященном поддержке IEC 60559 арифметики с плавающей запятой, C указывает:
Как правило, C99 избегает результата NaN, когда полезно числовое значение. [...] Результаты pow (∞, 0) и pow (0,0) равны 1, потому что есть приложения, которые могут использовать это определение. Например, если x(p) и y(p) — любые аналитические функции, обращающиеся в нуль при p = a, то pow(x,y), равная exp(y*log(x)), приближается к 1, когда p приближается к а.
Обновление C++
Как правильно заметил Лимес, я изначально ссылался на ссылку для сложной версии pow, в то время как несложная версия утверждает, что это ошибка домена проект стандарта C++ возвращается к черновик стандарта C, а также C99 и C11 в разделе 7.12.7.4
Функции pow параграф 2 говорит (выделено мной):
[...] Ошибка домена может возникнуть, если x равно нулю и y равно нулю.[...]
что, насколько я могу судить, означает, что такое поведение является неопределенным поведением Немного назад раздел 7.12.1
Обработка условий ошибки говорит:
[...] ошибка домена возникает, если входной аргумент находится за пределами домена, в котором определена математическая функция.[...] При ошибке домена функция возвращает значение, определяемое реализацией; если целочисленное выражение math_errhandling & MATH_ERRNO не равно нулю, целочисленное выражение errno получает значение EDOM; [...]
Таким образом, если была ошибка домена, то это было бы поведение, определяемое реализацией, но в обеих последних версиях gcc
и clang
значение errno
равно 0
, поэтому это не < em>ошибка домена для этих компиляторов.
Обновить Javascript
Для Javascript Спецификация языка ECMAScript® в разделе 15.8
< em>Математический объект под 15.8.2.13
pow (x, y) говорит среди прочих условий, что:
Если y равно +0, результатом будет 1, даже если x равно NaN.
person
Shafik Yaghmour
schedule
13.11.2013