//
// Solve Quadratic Equations with Complex Coefficients
// 2008-06-06 Tomonori Kouya
//
#include <iostream>
#include <complex>

using namespace std;

// Evaluation of (deg)th degree polynomial by Horner Method
complex<double> eval_poly(complex<double> a[], complex<double> x, int deg)
{
	complex<double> ret;

	ret = a[deg];
	while(--deg >= 0)
		ret = ret * x + a[deg];

	return ret;
}

int main()
{
	complex<double> a[3]; // Coefficients
	complex<double> x[2]; // Roots

	// Input 3 coefficients: a[2] * x^2 + a[1] * x + a[0] = 0
	cout << "a[0] = "; cin >> a[0];
	cout << "a[1] = "; cin >> a[1];
	cout << "a[2] = "; cin >> a[2];

	// Solve the equation
	x[0] = (-a[1] + sqrt(a[1] * a[1] - 4.0 * a[0] * a[2])) / (2.0 * a[2]);
	x[1] = (-a[1] - sqrt(a[1] * a[1] - 4.0 * a[0] * a[2])) / (2.0 * a[2]);

	// Output roots
	cout << "x[0] = " << x[0] << endl;
	cout << "x[1] = " << x[1] << endl;

	// Validate roots ( p(x) == 0 ?)
	cout << "p(x[0]) = " << eval_poly(a, x[0], 2) << endl;
	cout << "p(x[1]) = " << eval_poly(a, x[1], 2) << endl;

	return 0;
}
