사공욱님의 프로그램의 문제점을 하나 더 지적하자면...
sqrt() 의 인자로 음수가 들어가면 당연히 에러가 납니다.
미리 음수인지를 확인해서 별도의 처리를 해주시던가,
ANSI C++ 라이브러리의 복소수 클래스인 complex를 쓰는 것도 좋은 방법입니다.
#include <iostream>
#include <complex>
using namespace std;
int main()
{
complex<double> a, b, c, x1, x2, D;
cout << "a*x^2 + b*x + c = 0\n"
"a? "; cin >> a;
cout << "b? "; cin >> b;
cout << "c? "; cin >> c;
D = sqrt(b * b - 4.0 * a * c);
x1 = (-b + D) / (2.0 * a);
x2 = (-b - D) / (2.0 * a);
cout << "x1 = " << x1 << "\nx2 = " << x2 << endl;
return 0;
}
출력은 다음과 같습니다.
a*x^2 + b*x + c = 0
a? 1
b? 1
c? 1
x1 = (-0.5,0.866025)
x2 = (-0.5,-0.866025)
만약 -0.5±0.866025i 와 같은 출력 형태를 만드시려면,
별도의 출력 함수를 만드시면 됩니다.
|