\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{1}{\frac{\left(-b\right) - \sqrt{\sqrt[3]{{\left(b \cdot b - \left(4 \cdot a\right) \cdot c\right)}^{3}}}}{4}}}{2} \cdot \frac{a \cdot c}{a}double f(double a, double b, double c) {
double r44707 = b;
double r44708 = -r44707;
double r44709 = r44707 * r44707;
double r44710 = 4.0;
double r44711 = a;
double r44712 = r44710 * r44711;
double r44713 = c;
double r44714 = r44712 * r44713;
double r44715 = r44709 - r44714;
double r44716 = sqrt(r44715);
double r44717 = r44708 + r44716;
double r44718 = 2.0;
double r44719 = r44718 * r44711;
double r44720 = r44717 / r44719;
return r44720;
}
double f(double a, double b, double c) {
double r44721 = 1.0;
double r44722 = b;
double r44723 = -r44722;
double r44724 = r44722 * r44722;
double r44725 = 4.0;
double r44726 = a;
double r44727 = r44725 * r44726;
double r44728 = c;
double r44729 = r44727 * r44728;
double r44730 = r44724 - r44729;
double r44731 = 3.0;
double r44732 = pow(r44730, r44731);
double r44733 = cbrt(r44732);
double r44734 = sqrt(r44733);
double r44735 = r44723 - r44734;
double r44736 = r44735 / r44725;
double r44737 = r44721 / r44736;
double r44738 = 2.0;
double r44739 = r44737 / r44738;
double r44740 = r44726 * r44728;
double r44741 = r44740 / r44726;
double r44742 = r44739 * r44741;
return r44742;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 44.0
rmApplied flip-+44.0
Simplified0.4
rmApplied add-cbrt-cube0.4
Simplified0.5
rmApplied clear-num0.5
Simplified0.5
rmApplied div-inv0.6
Applied add-cube-cbrt0.6
Applied times-frac0.6
Applied times-frac0.5
Simplified0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2020081 +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)))