\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{\frac{c \cdot 4}{1}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r33616 = b;
double r33617 = -r33616;
double r33618 = r33616 * r33616;
double r33619 = 4.0;
double r33620 = a;
double r33621 = r33619 * r33620;
double r33622 = c;
double r33623 = r33621 * r33622;
double r33624 = r33618 - r33623;
double r33625 = sqrt(r33624);
double r33626 = r33617 + r33625;
double r33627 = 2.0;
double r33628 = r33627 * r33620;
double r33629 = r33626 / r33628;
return r33629;
}
double f(double a, double b, double c) {
double r33630 = 1.0;
double r33631 = 2.0;
double r33632 = r33630 / r33631;
double r33633 = c;
double r33634 = 4.0;
double r33635 = r33633 * r33634;
double r33636 = r33635 / r33630;
double r33637 = b;
double r33638 = -r33637;
double r33639 = r33637 * r33637;
double r33640 = a;
double r33641 = r33634 * r33640;
double r33642 = r33641 * r33633;
double r33643 = r33639 - r33642;
double r33644 = sqrt(r33643);
double r33645 = r33638 - r33644;
double r33646 = r33636 / r33645;
double r33647 = r33632 * r33646;
return r33647;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.4
rmApplied flip-+52.4
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.4
rmApplied associate-/r*0.2
Simplified0.1
Final simplification0.1
herbie shell --seed 2020046 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))