\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 -1.257476678127677856918278287038350045718 \cdot 10^{107}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le 2.496744794133526836762101371765290843051 \cdot 10^{-135}:\\
\;\;\;\;\frac{\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3}}{a}\\
\mathbf{elif}\;b \le 5.354608489416471204042085887246325611474 \cdot 10^{62}:\\
\;\;\;\;\frac{\frac{a}{\sqrt[3]{a}}}{\sqrt[3]{a}} \cdot \frac{\frac{1}{\frac{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{c}}}{\sqrt[3]{a}}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r109119 = b;
double r109120 = -r109119;
double r109121 = r109119 * r109119;
double r109122 = 3.0;
double r109123 = a;
double r109124 = r109122 * r109123;
double r109125 = c;
double r109126 = r109124 * r109125;
double r109127 = r109121 - r109126;
double r109128 = sqrt(r109127);
double r109129 = r109120 + r109128;
double r109130 = r109129 / r109124;
return r109130;
}
double f(double a, double b, double c) {
double r109131 = b;
double r109132 = -1.2574766781276779e+107;
bool r109133 = r109131 <= r109132;
double r109134 = 0.5;
double r109135 = c;
double r109136 = r109135 / r109131;
double r109137 = r109134 * r109136;
double r109138 = 0.6666666666666666;
double r109139 = a;
double r109140 = r109131 / r109139;
double r109141 = r109138 * r109140;
double r109142 = r109137 - r109141;
double r109143 = 2.4967447941335268e-135;
bool r109144 = r109131 <= r109143;
double r109145 = -r109131;
double r109146 = r109131 * r109131;
double r109147 = 3.0;
double r109148 = r109147 * r109139;
double r109149 = r109148 * r109135;
double r109150 = r109146 - r109149;
double r109151 = sqrt(r109150);
double r109152 = r109145 + r109151;
double r109153 = r109152 / r109147;
double r109154 = r109153 / r109139;
double r109155 = 5.354608489416471e+62;
bool r109156 = r109131 <= r109155;
double r109157 = cbrt(r109139);
double r109158 = r109139 / r109157;
double r109159 = r109158 / r109157;
double r109160 = 1.0;
double r109161 = r109145 - r109151;
double r109162 = r109161 / r109135;
double r109163 = r109160 / r109162;
double r109164 = r109163 / r109157;
double r109165 = r109159 * r109164;
double r109166 = -0.5;
double r109167 = r109166 * r109136;
double r109168 = r109156 ? r109165 : r109167;
double r109169 = r109144 ? r109154 : r109168;
double r109170 = r109133 ? r109142 : r109169;
return r109170;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -1.2574766781276779e+107Initial program 48.2
Taylor expanded around -inf 3.7
if -1.2574766781276779e+107 < b < 2.4967447941335268e-135Initial program 11.7
rmApplied associate-/r*11.7
if 2.4967447941335268e-135 < b < 5.354608489416471e+62Initial program 39.0
rmApplied flip-+39.0
Simplified16.1
rmApplied associate-/r*16.1
Simplified16.1
rmApplied clear-num16.4
Simplified16.3
rmApplied add-cube-cbrt17.0
Applied *-un-lft-identity17.0
Applied times-frac14.3
Applied add-sqr-sqrt14.3
Applied times-frac13.7
Applied times-frac10.2
Simplified10.2
Simplified10.2
if 5.354608489416471e+62 < b Initial program 57.7
Taylor expanded around inf 3.8
Final simplification8.1
herbie shell --seed 2020001
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))