why (0+0i)^{0} == (nan, nan) in c++

后端 未结 2 1666
醉话见心
醉话见心 2021-01-04 16:04

take a look at the code blew:

#include 
#include 

int main()
{
    std::cout << std::pow( std::complex(0,         


        
相关标签:
2条回答
  • 2021-01-04 16:37

    As Fred Larson correctly points out the documentation says:

    The result of pow(0, 0) is implementation-defined.

    Mathematically this makes sense since we have a contradictory situation where N^0 should always be 1 but 0^N should always be 0 for N > 0, so you should have no expectations mathematically as to the result of this either. This Wolfram Alpha forum posts goes into a bit more details.

    The case where the imaginary portion of the complex number is not zero is more complex situation. If the x in x^y is real then it should also be undefined but if x has an imaginary component then it looks like it is no longer undefined.

    0 讨论(0)
  • 2021-01-04 16:44

    According to std::pow documentation

    Return value
    base raised by power (exp or iexp).
    Domain error occurs if base is 0 and exp is less than or equal to ​0​. NAN is returned in that case. [...]

    In your code, you have both base with 0 and exp equal to 0 since the complex number 0 + 0 *i is still 0. So NaN seems expected.

    By courtesy of @Fred Larson, and according to overloaded std::pow for std::complex

    Computes complex x raised to a complex power y. The operation is defined as exp(y · log(x) ). A branch cut exists along the negative real axis. The result of pow(0, 0) is implementation-defined.

    0 讨论(0)
提交回复
热议问题