\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{4}{\frac{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}{c}}double f(double a, double b, double c) {
double r33730 = b;
double r33731 = -r33730;
double r33732 = r33730 * r33730;
double r33733 = 4.0;
double r33734 = a;
double r33735 = r33733 * r33734;
double r33736 = c;
double r33737 = r33735 * r33736;
double r33738 = r33732 - r33737;
double r33739 = sqrt(r33738);
double r33740 = r33731 + r33739;
double r33741 = 2.0;
double r33742 = r33741 * r33734;
double r33743 = r33740 / r33742;
return r33743;
}
double f(double a, double b, double c) {
double r33744 = 1.0;
double r33745 = 2.0;
double r33746 = r33744 / r33745;
double r33747 = 4.0;
double r33748 = b;
double r33749 = -r33748;
double r33750 = r33748 * r33748;
double r33751 = a;
double r33752 = r33747 * r33751;
double r33753 = c;
double r33754 = r33752 * r33753;
double r33755 = r33750 - r33754;
double r33756 = sqrt(r33755);
double r33757 = r33749 - r33756;
double r33758 = r33744 * r33757;
double r33759 = r33758 / r33753;
double r33760 = r33747 / r33759;
double r33761 = r33746 * r33760;
return r33761;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.6
rmApplied flip-+28.6
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 associate-/l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2020034 +o rules:numerics
(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)))