\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le 0.7074726914968051:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(\left(b \cdot \left(-b\right)\right), b, \left(b \cdot \left(b \cdot b\right)\right)\right) + \mathsf{fma}\left(\left(\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -3\right)\right)\right)\right), \left(\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -3\right)\right)\right)}\right), \left(b \cdot \left(b \cdot \left(-b\right)\right)\right)\right)}{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -3\right)\right)\right) + b \cdot \left(b + \sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -3\right)\right)\right)}\right)}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\left(\left(a \cdot c\right) \cdot \left(a \cdot c\right)\right) \cdot \frac{27}{8}}{b} - \left(a \cdot \frac{9}{2}\right) \cdot \left(b \cdot c\right)}{\mathsf{fma}\left(b, \left(b + \sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -3\right)\right)\right)}\right), \left(\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -3\right)\right)\right)\right)\right) \cdot 3}}{a}\\
\end{array}double f(double a, double b, double c, double __attribute__((unused)) d) {
double r2020742 = b;
double r2020743 = -r2020742;
double r2020744 = r2020742 * r2020742;
double r2020745 = 3.0;
double r2020746 = a;
double r2020747 = r2020745 * r2020746;
double r2020748 = c;
double r2020749 = r2020747 * r2020748;
double r2020750 = r2020744 - r2020749;
double r2020751 = sqrt(r2020750);
double r2020752 = r2020743 + r2020751;
double r2020753 = r2020752 / r2020747;
return r2020753;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r2020754 = b;
double r2020755 = 0.7074726914968051;
bool r2020756 = r2020754 <= r2020755;
double r2020757 = -r2020754;
double r2020758 = r2020754 * r2020757;
double r2020759 = r2020754 * r2020754;
double r2020760 = r2020754 * r2020759;
double r2020761 = fma(r2020758, r2020754, r2020760);
double r2020762 = c;
double r2020763 = a;
double r2020764 = -3.0;
double r2020765 = r2020763 * r2020764;
double r2020766 = r2020762 * r2020765;
double r2020767 = fma(r2020754, r2020754, r2020766);
double r2020768 = sqrt(r2020767);
double r2020769 = r2020754 * r2020758;
double r2020770 = fma(r2020767, r2020768, r2020769);
double r2020771 = r2020761 + r2020770;
double r2020772 = r2020754 + r2020768;
double r2020773 = r2020754 * r2020772;
double r2020774 = r2020767 + r2020773;
double r2020775 = r2020771 / r2020774;
double r2020776 = 3.0;
double r2020777 = r2020776 * r2020763;
double r2020778 = r2020775 / r2020777;
double r2020779 = r2020763 * r2020762;
double r2020780 = r2020779 * r2020779;
double r2020781 = 3.375;
double r2020782 = r2020780 * r2020781;
double r2020783 = r2020782 / r2020754;
double r2020784 = 4.5;
double r2020785 = r2020763 * r2020784;
double r2020786 = r2020754 * r2020762;
double r2020787 = r2020785 * r2020786;
double r2020788 = r2020783 - r2020787;
double r2020789 = fma(r2020754, r2020772, r2020767);
double r2020790 = r2020789 * r2020776;
double r2020791 = r2020788 / r2020790;
double r2020792 = r2020791 / r2020763;
double r2020793 = r2020756 ? r2020778 : r2020792;
return r2020793;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
if b < 0.7074726914968051Initial program 11.7
Simplified11.7
rmApplied flip3--11.7
Simplified11.2
Simplified11.2
rmApplied prod-diff11.0
if 0.7074726914968051 < b Initial program 31.6
Simplified31.6
rmApplied flip3--31.7
Simplified31.0
Simplified31.0
Taylor expanded around inf 8.9
Simplified8.9
Taylor expanded around 0 8.9
Simplified8.9
rmApplied associate-/r*8.9
Simplified8.9
Final simplification9.2
herbie shell --seed 2019128 +o rules:numerics
(FPCore (a b c d)
:name "Cubic critical, narrow range"
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))