\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{4 \cdot \left(a \cdot c\right)}{2 \cdot a}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r37625 = b;
double r37626 = -r37625;
double r37627 = r37625 * r37625;
double r37628 = 4.0;
double r37629 = a;
double r37630 = r37628 * r37629;
double r37631 = c;
double r37632 = r37630 * r37631;
double r37633 = r37627 - r37632;
double r37634 = sqrt(r37633);
double r37635 = r37626 + r37634;
double r37636 = 2.0;
double r37637 = r37636 * r37629;
double r37638 = r37635 / r37637;
return r37638;
}
double f(double a, double b, double c) {
double r37639 = 4.0;
double r37640 = a;
double r37641 = c;
double r37642 = r37640 * r37641;
double r37643 = r37639 * r37642;
double r37644 = 2.0;
double r37645 = r37644 * r37640;
double r37646 = r37643 / r37645;
double r37647 = b;
double r37648 = -r37647;
double r37649 = r37647 * r37647;
double r37650 = r37639 * r37640;
double r37651 = r37650 * r37641;
double r37652 = r37649 - r37651;
double r37653 = sqrt(r37652);
double r37654 = r37648 - r37653;
double r37655 = r37646 / r37654;
return r37655;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.5
rmApplied flip-+28.5
Simplified0.5
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.5
rmApplied associate-/r*0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019303
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:precision binary64
:pre (and (< 1.05367121277235087e-8 a 94906265.6242515594) (< 1.05367121277235087e-8 b 94906265.6242515594) (< 1.05367121277235087e-8 c 94906265.6242515594))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))