3 C++

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)
%
確かに

$\displaystyle \texttt{sqrt(I)}=\frac{1+i}{\sqrt{2}},\quad
(1+i)^2=2i
$

と計算出来ている。

実部、虚部、複素数、共役複素数の例もつけておく。
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;
}



桂田 祐史