\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 -2.5522742984076443 \cdot 10^{+116}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{c}{b} - \frac{b}{a} \cdot \frac{2}{3}\\
\mathbf{elif}\;b \le 2.590061654194537 \cdot 10^{-84}:\\
\;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\
\mathbf{elif}\;b \le 9.132523931635255 \cdot 10^{-77}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 2.0133162233951682 \cdot 10^{-44}:\\
\;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c, double __attribute__((unused)) d) {
double r3330707 = b;
double r3330708 = -r3330707;
double r3330709 = r3330707 * r3330707;
double r3330710 = 3.0;
double r3330711 = a;
double r3330712 = r3330710 * r3330711;
double r3330713 = c;
double r3330714 = r3330712 * r3330713;
double r3330715 = r3330709 - r3330714;
double r3330716 = sqrt(r3330715);
double r3330717 = r3330708 + r3330716;
double r3330718 = r3330717 / r3330712;
return r3330718;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r3330719 = b;
double r3330720 = -2.5522742984076443e+116;
bool r3330721 = r3330719 <= r3330720;
double r3330722 = 0.5;
double r3330723 = c;
double r3330724 = r3330723 / r3330719;
double r3330725 = r3330722 * r3330724;
double r3330726 = a;
double r3330727 = r3330719 / r3330726;
double r3330728 = 0.6666666666666666;
double r3330729 = r3330727 * r3330728;
double r3330730 = r3330725 - r3330729;
double r3330731 = 2.590061654194537e-84;
bool r3330732 = r3330719 <= r3330731;
double r3330733 = 1.0;
double r3330734 = 3.0;
double r3330735 = r3330734 * r3330726;
double r3330736 = r3330719 * r3330719;
double r3330737 = r3330735 * r3330723;
double r3330738 = r3330736 - r3330737;
double r3330739 = sqrt(r3330738);
double r3330740 = r3330739 - r3330719;
double r3330741 = r3330735 / r3330740;
double r3330742 = r3330733 / r3330741;
double r3330743 = 9.132523931635255e-77;
bool r3330744 = r3330719 <= r3330743;
double r3330745 = -0.5;
double r3330746 = r3330745 * r3330724;
double r3330747 = 2.0133162233951682e-44;
bool r3330748 = r3330719 <= r3330747;
double r3330749 = r3330748 ? r3330742 : r3330746;
double r3330750 = r3330744 ? r3330746 : r3330749;
double r3330751 = r3330732 ? r3330742 : r3330750;
double r3330752 = r3330721 ? r3330730 : r3330751;
return r3330752;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
Results
if b < -2.5522742984076443e+116Initial program 47.3
Simplified47.3
Taylor expanded around -inf 4.1
if -2.5522742984076443e+116 < b < 2.590061654194537e-84 or 9.132523931635255e-77 < b < 2.0133162233951682e-44Initial program 13.9
Simplified13.9
rmApplied *-un-lft-identity13.9
Applied associate-/l*14.0
if 2.590061654194537e-84 < b < 9.132523931635255e-77 or 2.0133162233951682e-44 < b Initial program 53.4
Simplified53.4
Taylor expanded around inf 7.7
Final simplification10.2
herbie shell --seed 2019129
(FPCore (a b c d)
:name "Cubic critical"
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))