#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?
答案 0 :(得分:1)
代码拼写错误cexp
或cexpl
为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)
。