#include <iostream>
#include <cassert>
#include <cmath>
bool solve_quadratic( double a, double b, double c, double & x1, double & x2)
{
assert ( a ! = 0 ) ;
const double delta = b * b - 4 * a * c;
if ( delta < 0 ) {
return false ;
}
if ( delta == 0 ) {
x1 = - b / ( 2 * a) ;
x2 = x1;
} else {
const double sqrt_delta = sqrt ( delta) ;
x1 = ( - b + sqrt_delta) / ( 2 * a) ;
x2 = ( - b - sqrt_delta) / ( 2 * a) ;
}
return true ;
}
void output_result_of_quadratic( double a, double b, double c)
{
double x1;
double x2;
std:: cout << "For : " << a << " x^2 + " << b << " x + " << c << " = 0" << std:: endl ;
if ( solve_quadratic( a, b, c, x1, x2) ) {
if ( x1 == x2) {
std:: cout << "The only solution is x: " << x1 << std:: endl ;
} else {
std:: cout << "The solutions are : " << x1 << " and " << x2 << std:: endl ;
}
} else {
std:: cout << "No real solution." << std:: endl ;
}
}
int main( )
{
output_result_of_quadratic( 1 , - 2 , 1 ) ; // 1
output_result_of_quadratic( 1 , 0 , 1 ) ; // complex
output_result_of_quadratic( 1 , - 5 , 6 ) ; // 2, 3
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPGNtYXRoPgoKYm9vbCBzb2x2ZV9xdWFkcmF0aWMoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlJiB4MSwgZG91YmxlJiB4MikKewogICAgYXNzZXJ0KGEgIT0gMCk7CgogICAgY29uc3QgZG91YmxlIGRlbHRhID0gYiAqIGIgLSA0ICogYSAqIGM7CiAgICBpZiAoZGVsdGEgPCAwKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKGRlbHRhID09IDApIHsKICAgICAgICB4MSA9IC1iIC8gKDIgKiBhKTsKICAgICAgICB4MiA9IHgxOwogICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBkb3VibGUgc3FydF9kZWx0YSA9IHNxcnQoZGVsdGEpOwogICAgICAgIHgxID0gKC1iICsgc3FydF9kZWx0YSkgLyAoMiAqIGEpOwogICAgICAgIHgyID0gKC1iIC0gc3FydF9kZWx0YSkgLyAoMiAqIGEpOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCnZvaWQgb3V0cHV0X3Jlc3VsdF9vZl9xdWFkcmF0aWMoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYykKewogICAgZG91YmxlIHgxOwogICAgZG91YmxlIHgyOwoKICAgIHN0ZDo6Y291dCA8PCAiRm9yIDogIiA8PCBhIDw8ICIgeF4yICsgIiA8PCBiIDw8ICIgeCArICIgPDwgYyA8PCAiID0gMCIgPDwgc3RkOjplbmRsOwogICAgaWYgKHNvbHZlX3F1YWRyYXRpYyhhLCBiLCBjLCB4MSwgeDIpKSB7CiAgICAgICAgaWYgKHgxID09IHgyKSB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiVGhlIG9ubHkgc29sdXRpb24gaXMgeDogIiA8PCB4MSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJUaGUgc29sdXRpb25zIGFyZSA6ICI8PCB4MSA8PCAiIGFuZCAiIDw8IHgyIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIHN0ZDo6Y291dCA8PCAiTm8gcmVhbCBzb2x1dGlvbi4iIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBvdXRwdXRfcmVzdWx0X29mX3F1YWRyYXRpYygxLCAtMiwgMSk7IC8vIDEKICAgIG91dHB1dF9yZXN1bHRfb2ZfcXVhZHJhdGljKDEsIDAsIDEpOyAgLy8gY29tcGxleAogICAgb3V0cHV0X3Jlc3VsdF9vZl9xdWFkcmF0aWMoMSwgLTUsIDYpOyAgLy8gMiwgMwoKICAgIHJldHVybiAwOwp9Cg==