0 0 следует понимать как предел, а не как арифметическое выражение, которое вы можете оценить непосредственно.
На множестве действительных чисел этот предел «существует» (здесь упрощается) и равен 1, так что вы получите такой результат.
С другой стороны, на множестве комплексных чисел вы приближаетесь к существенной особенности; не существует ни одного комплексного числа, которое вы могли бы присвоить пределу 0 0 . Таким образом, NaN
является единственным разумным результатом.
Так что, если вам нужна постоянная функция мощности, разумно было бы трактовать 0 0 как NaN в реальном случае, так как установка 0 0 = 1 несколько в любом случае, хитроумно в настоящей арифметике; хотя и меньше, чем в сложном случае.
Обратите внимание, что я несколько упростил здесь математику, но я повторю ключевой момент, который нужно убрать: не существует числа, которое было бы значимым результатом для 0 0 , интерпретируемого как комплексная степень функция.
Это включает в себя число 1. Для математически более строгой дискуссии вы могли бы взглянуть на https://math.stackexchange.com/ или другой, более ориентированный на математику ресурс.
Наконец, стоит отметить, что результат std::pow(std::complex(0.0, 0.0), 0)
определяется реализацией; Вышесказанное является обоснованием разумного выбора, сделанного вашей реализацией. Однако со строгой точки зрения C ++ - стандарта и игнорирования математического аспекта этой проблемы, 1 также будет совместимым результатом, как и pi, -∞ и 0.