std::complex というテンプレート・ライブラリィがある。
#include <complex> using namespace std; // これはお好み |
単精度 | complex<float> |
倍精度 | complex<double> |
?精度 | complex<long double> |
C の a = 1+2i; は、C++ では
a = complex<double>(1,2); |
complex<double> a(1,2); |
虚数単位を使いたい場合は、自分で定義するのかな? complex<double> I(0,1); とか。
test-cpp-complex-1.cpp |
/* * test-cpp-complex-1.cpp * g++ test-cpp-complex-1.cpp */ #include <iostream> #include <iomanip> // setprecision() #include <complex> #include <cmath> using namespace std; int main(void) { complex<double> I(0,1), z; cout << "i=" << I << endl; cout << "i^2=" << I * I << endl; cout << setprecision(16) << "sqrt(I)=" << sqrt(I) << endl; z=1.0+I; cout << "z=" << z << ", z^2=" << z*z << endl; return 0; } |
コンパイル&実行例 |
% g++ test-cpp-complex-1.cpp % ./a.out i=(0,1) i^2=(-1,0) sqrt(I)=(0.7071067811865476,0.7071067811865475) z=(1,1), z^2=(0,2) % |
実部、虚部、複素数、共役複素数の例もつけておく。
test-cpp-complex-3.cpp |
// test-cpp-complex-3.cpp #include <iostream> #include <complex> using namespace std; int main(void) { complex<double> z(1.0, 2.0); cout << "z=" << z << endl; cout << "z.real()=" << z.real() << ", real(z)=" << real(z) << endl; cout << "z.imag()=" << z.imag() << ", imag(z)=" << imag(z) << endl; cout << "abs(z)=" << abs(z) << endl; cout << "conj(z)=" << conj(z) << endl; } |