\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 -3.539544285799822 \cdot 10^{+127}:\\
\;\;\;\;\frac{\left(\frac{1}{2} \cdot \left(\left(\left(\left(c \cdot \sqrt[3]{-3}\right) \cdot \left(\sqrt[3]{3} \cdot \sqrt[3]{3}\right)\right) \cdot \sqrt[3]{-1}\right) \cdot \frac{a}{b}\right) - b\right) + \left(-b\right)}{a \cdot 3}\\
\mathbf{elif}\;b \le 6.134174794339903 \cdot 10^{-27}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\sqrt[3]{b} \cdot \sqrt[3]{b}, -\sqrt[3]{b}, \sqrt{b \cdot b - c \cdot \left(a \cdot 3\right)}\right)}{a \cdot 3}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{-3}{2} \cdot \frac{c \cdot a}{b}}{a \cdot 3}\\
\end{array}double f(double a, double b, double c) {
double r1636774 = b;
double r1636775 = -r1636774;
double r1636776 = r1636774 * r1636774;
double r1636777 = 3.0;
double r1636778 = a;
double r1636779 = r1636777 * r1636778;
double r1636780 = c;
double r1636781 = r1636779 * r1636780;
double r1636782 = r1636776 - r1636781;
double r1636783 = sqrt(r1636782);
double r1636784 = r1636775 + r1636783;
double r1636785 = r1636784 / r1636779;
return r1636785;
}
double f(double a, double b, double c) {
double r1636786 = b;
double r1636787 = -3.539544285799822e+127;
bool r1636788 = r1636786 <= r1636787;
double r1636789 = 0.5;
double r1636790 = c;
double r1636791 = -3.0;
double r1636792 = cbrt(r1636791);
double r1636793 = r1636790 * r1636792;
double r1636794 = 3.0;
double r1636795 = cbrt(r1636794);
double r1636796 = r1636795 * r1636795;
double r1636797 = r1636793 * r1636796;
double r1636798 = -1.0;
double r1636799 = cbrt(r1636798);
double r1636800 = r1636797 * r1636799;
double r1636801 = a;
double r1636802 = r1636801 / r1636786;
double r1636803 = r1636800 * r1636802;
double r1636804 = r1636789 * r1636803;
double r1636805 = r1636804 - r1636786;
double r1636806 = -r1636786;
double r1636807 = r1636805 + r1636806;
double r1636808 = r1636801 * r1636794;
double r1636809 = r1636807 / r1636808;
double r1636810 = 6.134174794339903e-27;
bool r1636811 = r1636786 <= r1636810;
double r1636812 = cbrt(r1636786);
double r1636813 = r1636812 * r1636812;
double r1636814 = -r1636812;
double r1636815 = r1636786 * r1636786;
double r1636816 = r1636790 * r1636808;
double r1636817 = r1636815 - r1636816;
double r1636818 = sqrt(r1636817);
double r1636819 = fma(r1636813, r1636814, r1636818);
double r1636820 = r1636819 / r1636808;
double r1636821 = -1.5;
double r1636822 = r1636790 * r1636801;
double r1636823 = r1636822 / r1636786;
double r1636824 = r1636821 * r1636823;
double r1636825 = r1636824 / r1636808;
double r1636826 = r1636811 ? r1636820 : r1636825;
double r1636827 = r1636788 ? r1636809 : r1636826;
return r1636827;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -3.539544285799822e+127Initial program 51.7
rmApplied add-cube-cbrt51.7
rmApplied cbrt-prod51.7
Taylor expanded around -inf 8.8
Simplified2.7
if -3.539544285799822e+127 < b < 6.134174794339903e-27Initial program 14.5
rmApplied add-cube-cbrt14.7
Applied distribute-rgt-neg-in14.7
Applied fma-def14.7
if 6.134174794339903e-27 < b Initial program 53.7
Taylor expanded around inf 17.7
Final simplification14.2
herbie shell --seed 2019153 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))