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

时间:2017-08-29 15:12:06

标签: c complex-numbers

#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?

1 个答案:

答案 0 :(得分:1)

代码拼写错误cexpcexplexp

在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)