为什么 exp(iπ) return 1 而不是 -1?

Why does exp(iπ) return 1 instead of -1?

#include <stdio.h>
#include <complex.h>
#include <math.h>

const long double PI = acos(-1);
int main() {
    double complex z = exp(PI*I);
    printf("%lf %lf", crealf(z), cimagf(z));

    return 0;
}

我们知道exp((pi)(i))应该是cos(pi) + i*sin(pi) = -1,那为什么我运行这个程序输出的是1呢?

代码将 cexpcexpl 拼错为 exp

在 C 中,这些函数声明为

long double complex cexpl(long double complex z);
double complex cexp(double complex z);
double exp(double arg);

C++ 中,以上所有(以及更多)都可以作为 std::exp() 使用。但是 C 不支持重载,因此作为程序员,您有责任选择适合您的参数的那个,否则您会发现输入值被转换(使用缩小转换,如有必要)。这意味着 z 的虚部丢失,在您的代码中留下 exp(0)