\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a} \le -7.679334050304802053010105877817181863065 \cdot 10^{-5}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(b, b, -\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right)\right)}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r88787 = b;
double r88788 = -r88787;
double r88789 = r88787 * r88787;
double r88790 = 3.0;
double r88791 = a;
double r88792 = r88790 * r88791;
double r88793 = c;
double r88794 = r88792 * r88793;
double r88795 = r88789 - r88794;
double r88796 = sqrt(r88795);
double r88797 = r88788 + r88796;
double r88798 = r88797 / r88792;
return r88798;
}
double f(double a, double b, double c) {
double r88799 = b;
double r88800 = -r88799;
double r88801 = r88799 * r88799;
double r88802 = 3.0;
double r88803 = a;
double r88804 = r88802 * r88803;
double r88805 = c;
double r88806 = r88804 * r88805;
double r88807 = r88801 - r88806;
double r88808 = sqrt(r88807);
double r88809 = r88800 + r88808;
double r88810 = r88809 / r88804;
double r88811 = -7.679334050304802e-05;
bool r88812 = r88810 <= r88811;
double r88813 = -r88807;
double r88814 = fma(r88799, r88799, r88813);
double r88815 = r88800 - r88808;
double r88816 = r88814 / r88815;
double r88817 = r88816 / r88804;
double r88818 = -0.5;
double r88819 = r88805 / r88799;
double r88820 = r88818 * r88819;
double r88821 = r88812 ? r88817 : r88820;
return r88821;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -7.679334050304802e-05Initial program 20.4
rmApplied flip-+20.4
Simplified19.6
if -7.679334050304802e-05 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 51.0
Taylor expanded around inf 6.8
Final simplification9.7
herbie shell --seed 2019354 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, 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) (* (* 3 a) c)))) (* 3 a)))