\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 1647.131571019072:\\
\;\;\;\;\frac{\frac{\left(b \cdot b + -3 \cdot \left(a \cdot c\right)\right) \cdot \sqrt{b \cdot b + -3 \cdot \left(a \cdot c\right)} - \left(b \cdot b\right) \cdot b}{\left(b \cdot b + -3 \cdot \left(a \cdot c\right)\right) + \left(b \cdot \sqrt{b \cdot b + -3 \cdot \left(a \cdot c\right)} + b \cdot b\right)}}{a \cdot 3}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r4014280 = b;
double r4014281 = -r4014280;
double r4014282 = r4014280 * r4014280;
double r4014283 = 3.0;
double r4014284 = a;
double r4014285 = r4014283 * r4014284;
double r4014286 = c;
double r4014287 = r4014285 * r4014286;
double r4014288 = r4014282 - r4014287;
double r4014289 = sqrt(r4014288);
double r4014290 = r4014281 + r4014289;
double r4014291 = r4014290 / r4014285;
return r4014291;
}
double f(double a, double b, double c) {
double r4014292 = b;
double r4014293 = 1647.131571019072;
bool r4014294 = r4014292 <= r4014293;
double r4014295 = r4014292 * r4014292;
double r4014296 = -3.0;
double r4014297 = a;
double r4014298 = c;
double r4014299 = r4014297 * r4014298;
double r4014300 = r4014296 * r4014299;
double r4014301 = r4014295 + r4014300;
double r4014302 = sqrt(r4014301);
double r4014303 = r4014301 * r4014302;
double r4014304 = r4014295 * r4014292;
double r4014305 = r4014303 - r4014304;
double r4014306 = r4014292 * r4014302;
double r4014307 = r4014306 + r4014295;
double r4014308 = r4014301 + r4014307;
double r4014309 = r4014305 / r4014308;
double r4014310 = 3.0;
double r4014311 = r4014297 * r4014310;
double r4014312 = r4014309 / r4014311;
double r4014313 = -0.5;
double r4014314 = r4014298 / r4014292;
double r4014315 = r4014313 * r4014314;
double r4014316 = r4014294 ? r4014312 : r4014315;
return r4014316;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 1647.131571019072Initial program 17.5
Simplified17.5
rmApplied flip3--17.6
Simplified16.8
Simplified16.8
if 1647.131571019072 < b Initial program 36.9
Simplified36.9
Taylor expanded around inf 15.7
Final simplification16.2
herbie shell --seed 2019149
(FPCore (a b c)
: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)))