\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}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{\frac{1}{4}}double f(double a, double b, double c) {
double r31708 = b;
double r31709 = -r31708;
double r31710 = r31708 * r31708;
double r31711 = 4.0;
double r31712 = a;
double r31713 = r31711 * r31712;
double r31714 = c;
double r31715 = r31713 * r31714;
double r31716 = r31710 - r31715;
double r31717 = sqrt(r31716);
double r31718 = r31709 + r31717;
double r31719 = 2.0;
double r31720 = r31719 * r31712;
double r31721 = r31718 / r31720;
return r31721;
}
double f(double a, double b, double c) {
double r31722 = 1.0;
double r31723 = 2.0;
double r31724 = r31722 / r31723;
double r31725 = c;
double r31726 = b;
double r31727 = -r31726;
double r31728 = r31726 * r31726;
double r31729 = 4.0;
double r31730 = a;
double r31731 = r31729 * r31730;
double r31732 = r31731 * r31725;
double r31733 = r31728 - r31732;
double r31734 = sqrt(r31733);
double r31735 = r31727 - r31734;
double r31736 = r31725 / r31735;
double r31737 = r31722 / r31729;
double r31738 = r31736 / r31737;
double r31739 = r31724 * r31738;
return r31739;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.4
rmApplied flip-+28.4
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Simplified0.5
rmApplied clear-num0.5
Simplified0.4
rmApplied div-inv0.4
Applied associate-/r*0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2020018
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:precision binary64
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))