在 C 中计算 e^(-j)
我需要计算 C 中的虚数指数。
据我所知,C 中没有复数库。可以使用 exp(x)
e^x math.h
的 >,但是如何计算 e^(-i)
的值,其中 i = sqrt(-1)
?
I need to compute imaginary exponential in C.
As far as I know, there is no complex number library in C. It is possible to get e^x
with exp(x)
of math.h
, but how can I compute the value of e^(-i)
, where i = sqrt(-1)
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
在 C99 中,有一个
complex
类型。包含complex.h
;您可能需要在 gcc 上链接-lm
。请注意,Microsoft Visual C 不支持复杂
;如果您需要使用此编译器,也许您可以加入一些 C++ 并使用 <代码>复杂模板。I
定义为虚数单位,cexp
进行求幂。完整代码示例:请参阅
man 7 complex
了解更多信息。In C99, there is a
complex
type. Includecomplex.h
; you may need to link with-lm
on gcc. Note that Microsoft Visual C does not supportcomplex
; if you need to use this compiler, maybe you can sprinkle in some C++ and use thecomplex
template.I
is defined as the imaginary unit, andcexp
does exponentiation. Full code example:See
man 7 complex
for more information.请注意,复数的指数等于:
那么:
Note that exponent of complex number equals:
Then:
使用欧拉公式,您可以得到
e^-i == cos(1) - i*sin(1)
Using the Euler's Formula you have that
e^-i == cos(1) - i*sin(1)
e^-j
只是cos(1) - j*sin(1)
,因此您可以使用实函数生成实部和虚部。e^-j
is justcos(1) - j*sin(1)
, so you can just generate the real and imaginary parts using real functions.只需使用笛卡尔形式
if
z = m*e^j*(arg);
Just use the cartesian form
if
z = m*e^j*(arg);
调用 C++ 函数是您的解决方案吗? C++ STL 有一个很好的复杂类,boost 也必须提供一些不错的选项。用 C++ 编写一个函数并将其声明为“extern C”,
然后您可以从您依赖的任何 C 代码(Ansi-C、C99,...)调用该函数。
Is calling a c++ function a solution for you? The C++ STL has a nice complex-class and boost also has to offer some nice options. Write a function in C++ and declare it "extern C"
Then you can call the function from whatever C-code you rely on ( Ansi-C, C99, ...).
在C++中可以直接完成:
In C++ it can be done directly: