\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{\frac{(\left(\sqrt{\sqrt{(c \cdot \left(a \cdot -4\right) + \left(b \cdot b\right))_*}}\right) \cdot \left(\sqrt{\sqrt{(c \cdot \left(a \cdot -4\right) + \left(b \cdot b\right))_*}}\right) + \left(-b\right))_*}{2}}{\sqrt[3]{a} \cdot \sqrt[3]{a}}}{\sqrt[3]{\sqrt[3]{a}} \cdot \left(\sqrt[3]{\sqrt[3]{a}} \cdot \sqrt[3]{\sqrt[3]{a}}\right)}double f(double a, double b, double c) {
double r3874798 = b;
double r3874799 = -r3874798;
double r3874800 = r3874798 * r3874798;
double r3874801 = 4.0;
double r3874802 = a;
double r3874803 = r3874801 * r3874802;
double r3874804 = c;
double r3874805 = r3874803 * r3874804;
double r3874806 = r3874800 - r3874805;
double r3874807 = sqrt(r3874806);
double r3874808 = r3874799 + r3874807;
double r3874809 = 2.0;
double r3874810 = r3874809 * r3874802;
double r3874811 = r3874808 / r3874810;
return r3874811;
}
double f(double a, double b, double c) {
double r3874812 = c;
double r3874813 = a;
double r3874814 = -4.0;
double r3874815 = r3874813 * r3874814;
double r3874816 = b;
double r3874817 = r3874816 * r3874816;
double r3874818 = fma(r3874812, r3874815, r3874817);
double r3874819 = sqrt(r3874818);
double r3874820 = sqrt(r3874819);
double r3874821 = -r3874816;
double r3874822 = fma(r3874820, r3874820, r3874821);
double r3874823 = 2.0;
double r3874824 = r3874822 / r3874823;
double r3874825 = cbrt(r3874813);
double r3874826 = r3874825 * r3874825;
double r3874827 = r3874824 / r3874826;
double r3874828 = cbrt(r3874825);
double r3874829 = r3874828 * r3874828;
double r3874830 = r3874828 * r3874829;
double r3874831 = r3874827 / r3874830;
return r3874831;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 44.0
Simplified44.0
rmApplied add-sqr-sqrt44.0
Applied fma-neg43.4
rmApplied add-cube-cbrt43.4
Applied associate-/r*43.4
rmApplied add-cube-cbrt43.4
Final simplification43.4
herbie shell --seed 2019107 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, medium range"
:pre (and (< 1.1102230246251565e-16 a 9007199254740992.0) (< 1.1102230246251565e-16 b 9007199254740992.0) (< 1.1102230246251565e-16 c 9007199254740992.0))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))