C++ 复数在C+中的表示+;离散傅里叶变换

C++ 复数在C+中的表示+;离散傅里叶变换,c++,math,stl,fft,complex-numbers,C++,Math,Stl,Fft,Complex Numbers,我目前正在编写一个小工具,可以帮助我检查手动计算的傅立叶向量是否正确。现在我需要由omega=exp(2*pi*i/n)指定的第n个单位根。有人能解释我如何将这个代码< Omega < /C>作为C++中的复数< /> > > < /p> < p>嗯,旋转因子Ω的实部和虚部仅为: double angle = 2*pi/n; double real = cos(angle); double imaj = sin(angle); complex<double> omega(real

我目前正在编写一个小工具,可以帮助我检查手动计算的傅立叶向量是否正确。现在我需要由
omega=exp(2*pi*i/n)
指定的第n个单位根。有人能解释我如何将这个代码< Omega < /C>作为C++中的<代码>复数< /> > > < /p> < p>嗯,旋转因子Ω的实部和虚部仅为:

double angle = 2*pi/n;

double real = cos(angle);
double imaj = sin(angle);

complex<double> omega(real, imaj);
双角度=2*pi/n;
双实数=cos(角度);
双imaj=正弦(角度);
复合ω(实数,imaj);

旋转因子ω的实部和虚部是:

double angle = 2*pi/n;

double real = cos(angle);
double imaj = sin(angle);

complex<double> omega(real, imaj);
双角度=2*pi/n;
双实数=cos(角度);
双imaj=正弦(角度);
复合ω(实数,imaj);
使用:

那么很容易:

complex<double> rootOfUnity(cos(TWOPI/n), sin(TWOPI/n));
复数根单位(cos(TWOPI/n),sin(TWOPI/n));
(将TWOPI替换为系统上可用的宏,或仅替换为2π的值,但您认为合适)。

使用:

那么很容易:

complex<double> rootOfUnity(cos(TWOPI/n), sin(TWOPI/n));
复数根单位(cos(TWOPI/n),sin(TWOPI/n));

(将TWOPI替换为系统上可用的宏,或仅替换为2π的值,但您认为合适)。

有一个函数使用极坐标返回复数:

#include<complex>
complex polar(const T& rho)
complex polar(const T& rho, const T& theta)

有一个函数使用极坐标返回复数:

#include<complex>
complex polar(const T& rho)
complex polar(const T& rho, const T& theta)

有没有关于如何计算pi的具体建议?代码< > 4×AATN(1)< /代码>是否足够?使用Visual Studio 2010在Windows 8上使用Microsoft C++编译器。包括
cmath.h
不提供
M_PI
@克里斯汀:是的,使用4.0*atan(1.0)就可以了。或者你可以直接使用
double-TWOPI=6.283185307179586476925286766559
@Christian:我没意识到!)因为我总是定义我自己的Pi宏,硬编码为50位数。。。lolI只是想知道我是怎么知道这个的,但是忘记了Euler公式:)谢谢,伙计们!有没有关于如何计算pi的具体建议?代码< > 4×AATN(1)< /代码>是否足够?使用Visual Studio 2010在Windows 8上使用Microsoft C++编译器。包括
cmath.h
不提供
M_PI
@克里斯汀:是的,使用4.0*atan(1.0)就可以了。或者你可以直接使用
double-TWOPI=6.283185307179586476925286766559
@Christian:我没意识到!)因为我总是定义我自己的Pi宏,硬编码为50位数。。。lolI只是想知道我是怎么知道这个的,但是忘记了Euler公式:)谢谢,伙计们!