\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{\frac{2 \cdot a}{4 \cdot \left(a \cdot c\right)} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r38686 = b;
double r38687 = -r38686;
double r38688 = r38686 * r38686;
double r38689 = 4.0;
double r38690 = a;
double r38691 = r38689 * r38690;
double r38692 = c;
double r38693 = r38691 * r38692;
double r38694 = r38688 - r38693;
double r38695 = sqrt(r38694);
double r38696 = r38687 + r38695;
double r38697 = 2.0;
double r38698 = r38697 * r38690;
double r38699 = r38696 / r38698;
return r38699;
}
double f(double a, double b, double c) {
double r38700 = 1.0;
double r38701 = 2.0;
double r38702 = a;
double r38703 = r38701 * r38702;
double r38704 = 4.0;
double r38705 = c;
double r38706 = r38702 * r38705;
double r38707 = r38704 * r38706;
double r38708 = r38703 / r38707;
double r38709 = b;
double r38710 = -r38709;
double r38711 = r38709 * r38709;
double r38712 = r38704 * r38702;
double r38713 = r38712 * r38705;
double r38714 = r38711 - r38713;
double r38715 = sqrt(r38714);
double r38716 = r38710 - r38715;
double r38717 = r38708 * r38716;
double r38718 = r38700 / r38717;
return r38718;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.7
rmApplied flip-+28.7
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied associate-/l*0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019353 +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)))