\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 \cdot 4}{1}}{\left(-b\right) - \left|\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}\right| \cdot \sqrt{\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}}}double f(double a, double b, double c) {
double r58801 = b;
double r58802 = -r58801;
double r58803 = r58801 * r58801;
double r58804 = 4.0;
double r58805 = a;
double r58806 = r58804 * r58805;
double r58807 = c;
double r58808 = r58806 * r58807;
double r58809 = r58803 - r58808;
double r58810 = sqrt(r58809);
double r58811 = r58802 + r58810;
double r58812 = 2.0;
double r58813 = r58812 * r58805;
double r58814 = r58811 / r58813;
return r58814;
}
double f(double a, double b, double c) {
double r58815 = 1.0;
double r58816 = 2.0;
double r58817 = r58815 / r58816;
double r58818 = c;
double r58819 = 4.0;
double r58820 = r58818 * r58819;
double r58821 = r58820 / r58815;
double r58822 = b;
double r58823 = -r58822;
double r58824 = r58822 * r58822;
double r58825 = a;
double r58826 = r58819 * r58825;
double r58827 = r58826 * r58818;
double r58828 = r58824 - r58827;
double r58829 = cbrt(r58828);
double r58830 = fabs(r58829);
double r58831 = sqrt(r58829);
double r58832 = r58830 * r58831;
double r58833 = r58823 - r58832;
double r58834 = r58821 / r58833;
double r58835 = r58817 * r58834;
return r58835;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.8
rmApplied flip-+43.9
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.4
rmApplied associate-/r*0.2
Simplified0.2
rmApplied add-cube-cbrt0.5
Applied sqrt-prod0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019353 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))