\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 r133183 = b;
double r133184 = -r133183;
double r133185 = r133183 * r133183;
double r133186 = 3.0;
double r133187 = a;
double r133188 = r133186 * r133187;
double r133189 = c;
double r133190 = r133188 * r133189;
double r133191 = r133185 - r133190;
double r133192 = sqrt(r133191);
double r133193 = r133184 + r133192;
double r133194 = r133193 / r133188;
return r133194;
}
double f(double a, double b, double c) {
double r133195 = b;
double r133196 = -1.2574766781276779e+107;
bool r133197 = r133195 <= r133196;
double r133198 = 0.5;
double r133199 = c;
double r133200 = r133199 / r133195;
double r133201 = r133198 * r133200;
double r133202 = 0.6666666666666666;
double r133203 = a;
double r133204 = r133195 / r133203;
double r133205 = r133202 * r133204;
double r133206 = r133201 - r133205;
double r133207 = 2.4967447941335268e-135;
bool r133208 = r133195 <= r133207;
double r133209 = -r133195;
double r133210 = r133195 * r133195;
double r133211 = 3.0;
double r133212 = r133211 * r133203;
double r133213 = r133212 * r133199;
double r133214 = r133210 - r133213;
double r133215 = sqrt(r133214);
double r133216 = r133209 + r133215;
double r133217 = r133216 / r133211;
double r133218 = r133217 / r133203;
double r133219 = 5.354608489416471e+62;
bool r133220 = r133195 <= r133219;
double r133221 = cbrt(r133203);
double r133222 = r133203 / r133221;
double r133223 = r133222 / r133221;
double r133224 = 1.0;
double r133225 = r133209 - r133215;
double r133226 = r133225 / r133199;
double r133227 = r133224 / r133226;
double r133228 = r133227 / r133221;
double r133229 = r133223 * r133228;
double r133230 = -0.5;
double r133231 = r133230 * r133200;
double r133232 = r133220 ? r133229 : r133231;
double r133233 = r133208 ? r133218 : r133232;
double r133234 = r133197 ? r133206 : r133233;
return r133234;
}



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 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))