複素係数の2次方程式を解いてみよう。
quadratic-equation.cpp |
1 // quadratic-equation.cpp --- 複素係数の 2 次方程式を解く。 2 // 3 // コンパイルは 4 // g++ -o quadratic-equation quadratic-equation.cpp 5 // 6 // 注意: 素朴な (桁落ちの対策などしていない) アルゴリズムを使っている。 7 8 #include <iostream> 9 #include <complex> 10 using namespace std; 11 12 int main(void) 13 { 14 complex<double> a, b, c, D, x1, x2; 15 16 cout << "複素係数の2次方程式 a x^2+b x+c=0 (a≠0) を解きます。" << endl; 17 cout << " 複素数は ( ) でくくり、実部と虚部をカンマ , で区切って表す。" 18 << endl; 19 cout << " 例えば 1+2i は (1,2) と表わします。" << endl; 20 cout << "入力してください。" << endl; 21 22 cout << "a="; cin >> a; 23 cout << "b="; cin >> b; 24 cout << "c="; cin >> c; 25 26 cout << "a=" << a << ", b=" << b << ", c=" << c << endl; 27 28 D = sqrt(b * b - 4.0 * a * c); 29 x1 = (-b + D) / (2.0 * a); 30 x2 = (-b - D) / (2.0 * a); 31 cout << "x1=" << x1 << endl; 32 cout << "x2=" << x2 << endl; 33 34 return 0; 35 } |
この結果は次のようになる。
実行例 |
% g++-mp-8 -o quadratic-equation quadratic-equation.cpp % ./quadratic-equation 複素係数の2次方程式 a x^2+b x+c=0 (a≠0) を解きます。 複素数は ( ) でくくり、実部と虚部をカンマ , で区切って表す。 例えば 1+2i は (1,2) と表わします。 入力してください。 a=1 b=1 c=1 a=(1,0), b=(1,0), c=(1,0) x1=(-0.5,0.866025) x2=(-0.5,-0.866025) % |