複素数型

複素数型 (英: complex data type) とは、いくつかのプログラミング言語において標準で用意されているデータ型の1つで、複素数の表現および演算を取り扱うものである。コンピュータが（厳密には）実数を扱えるわけではないので、複素数も同様に、実際は浮動小数点型のタプルである。

複素数演算
複素数型の値は通常、2つの浮動小数点数によって表される。あまりないが極座標表現を併用するものや場合もある。加減乗除の演算子（+, -, *, /）が複素数を扱えたり、複素数型の値を表現するリテラルがあったりする言語のことを「複素数のサポートがある」などと言ったりする。他に、比較演算や、ライブラリによる文字列との変換、などがある。数学と同様に、虚部が0の複素数型の値を、（何らかの暗黙の型変換システムによって）他の、実数の部分集合となっている数値型の値と同一視できるような場合もある。

コンパイラの場合、FPU命令の列にコンパイルするものもあれば、ライブラリ呼び出しにコンパイルするものもある。命令セットアーキテクチャによっては、直接サポートされていることもある。

実装
 FORTRAN の COMPLEX 型
 C言語では、C99 標準ライブラリヘッダの <[[標準Cライブラリ#複素数 <complex.h>|complex.h]]> に複素数演算に必要なデータ型や関数の定義が含まれる。
 C++ 標準ライブラリには、complex クラステンプレートと複素関数が <complex> ヘッダに含まれる。
 Go言語では組み込み型に complex64 (実部、虚部ともに32ビット単精度型) と complex128 (実部、虚部ともに64ビット倍精度型) がある。
 Perl はコアモジュールの Math::Complex で複素数をサポートする。
 Python は組み込みの complex 型で複素数をサポートする。虚数リテラルは数値の最後に j と付けることで表す。複素関数は標準ライブラリモジュールの cmath で提供される。 
 Ruby は標準ライブラリモジュール complex に含まれる Complex クラスで複素数をサポートする。
 OCaml は標準ライブラリモジュールの Complex を通して複素数をサポートする。
 Haskell は標準ライブラリモジュールの Data.Complex (以前は Complex) を通して複素数をサポートする。
 Java では、Apache Commons Math に含まれる Complex クラスを通して複素数をサポートする。
 Common Lisp: ANSI 標準では成分が浮動小数点数か任意長整数からなる複素数をサポートする。基本的な数学関数は、適用可能な限りにおいて、複素数においても定義される。例えば -1 の平方根は複素数となる。
 ? (sqrt -1)
#C(0 1)            ; the result of (sqrt -1)
 Scheme: 複素数と複素関数 (例: sin) は言語仕様に含まれている。これは R5RS ではオプションだったが、R6RS では実装が必須となっている。
 .NET Framework では、バージョン 4.0 より System.Numerics.Complex で提供される。

歴史
COMPLEX 型は FORTRAN IVより導入された。

参照

データ型