为什么 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呢?
代码将 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)
。
#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呢?
代码将 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)
。