\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{\frac{4 \cdot \left(a \cdot c\right)}{2}}{a}}{\left(-b\right) - \sqrt{\sqrt[3]{{\left(b \cdot b - \left(4 \cdot a\right) \cdot c\right)}^{3}}}}double f(double a, double b, double c) {
double r35697 = b;
double r35698 = -r35697;
double r35699 = r35697 * r35697;
double r35700 = 4.0;
double r35701 = a;
double r35702 = r35700 * r35701;
double r35703 = c;
double r35704 = r35702 * r35703;
double r35705 = r35699 - r35704;
double r35706 = sqrt(r35705);
double r35707 = r35698 + r35706;
double r35708 = 2.0;
double r35709 = r35708 * r35701;
double r35710 = r35707 / r35709;
return r35710;
}
double f(double a, double b, double c) {
double r35711 = 4.0;
double r35712 = a;
double r35713 = c;
double r35714 = r35712 * r35713;
double r35715 = r35711 * r35714;
double r35716 = 2.0;
double r35717 = r35715 / r35716;
double r35718 = r35717 / r35712;
double r35719 = b;
double r35720 = -r35719;
double r35721 = r35719 * r35719;
double r35722 = r35711 * r35712;
double r35723 = r35722 * r35713;
double r35724 = r35721 - r35723;
double r35725 = 3.0;
double r35726 = pow(r35724, r35725);
double r35727 = cbrt(r35726);
double r35728 = sqrt(r35727);
double r35729 = r35720 - r35728;
double r35730 = r35718 / r35729;
return r35730;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.4
rmApplied flip-+28.5
Simplified0.5
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied associate-/r*0.3
Simplified0.3
rmApplied add-cbrt-cube0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020056
(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)))