はじめに
C++で複素数計算を行う際、`std::complex` は非常に便利な機能を提供します。特に、より高い精度が求められる科学技術計算や数値解析の分野では、`std::complex
`std::complex` とは?
`std::complex
`long double` は、`float` や `double` よりも高い精度を持つ浮動小数点型です。そのため、`std::complex
具体的には、`std::complex
- 高精度: `long double` の精度により、`double` よりも多くの有効桁数を扱えます。
- 複素数演算: 加算、減算、乗算、除算といった基本的な算術演算はもちろん、指数関数 (`exp`)、対数関数 (`log`)、三角関数 (`sin`, `cos`, `tan`) など、様々な数学関数が `std::complex` 型に対してオーバーロードされており、複素数として自然に計算できます。
- 標準ライブラリ: `
` ヘッダーをインクルードするだけで利用でき、特別な設定は不要です。
`std::complex` の使い方
`std::complex
例えば、実数部が 1.0、虚数部が 2.0 の複素数を `std::complex
include
include
int main() {
// std::complex
// 実数部: 1.0L, 虚数部: 2.0L
std::complex
// 初期化された複素数を表示する
std::cout << "初期化された複素数: " << cld << std::endl;
// 実数部と虚数部を取得する
// real() メソッドで実数部、imag() メソッドで虚数部を取得できる
std::cout << "実数部: " << cld.real() << std::endl;
std::cout << "虚数部: " << cld.imag() << std::endl;
return 0;
}
このコードを実行すると、以下のような出力が得られます。
初期化された複素数: (1.0,2.0)
実数部: 1
虚数部: 2
また、複素数同士の演算も直感的に行うことができます。
include
include
int main() {
// 2つの std::complex
std::complex
std::complex
// 加算 `std::complex 注意点としては、`long double` の精度や範囲は、コンパイラやターゲットアーキテクチャに依存する可能性があるということです。一般的には `double` よりも高精度ですが、その具体的なビット数や表現できる値の範囲は環境によって異なる場合があります。そのため、移植性を重視する場合は、`double` を使用することも検討しましょう。 また、高精度な計算は、一般的に `double` よりも計算コストが高くなります。パフォーマンスが最優先されるアプリケーションでは、`double` で十分な精度が得られるか、あるいは `float` で十分かを検討し、適切な型を選択することが重要です。 `std::complex
std::complex
std::cout << "c1 + c2 = " << sum << std::endl;
// 乗算
std::complex
std::cout << "c1 c2 = " << product << std::endl;
// 共役複素数 (conjugate)
std::complex
std::cout << "conjugate(c1) = " << conj_c1 << std::endl;
// 複素数の絶対値 (magnitude)
long double magnitude_c1 = std::abs(c1);
std::cout << "abs(c1) = " << magnitude_c1 << std::endl;
return 0;
}
実行結果例:
c1 + c2 = (4.0,6.0)
c1 c2 = (-5.0,10.0)
conjugate(c1) = (3.0,-4.0)
abs(c1) = 5
応用と注意点

コメント