\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.054798768406738353528696346741077845707 \cdot 10^{-17}:\\
\;\;\;\;\frac{\frac{\frac{\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right) - b \cdot b}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + b}}{3}}{a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r81314 = b;
double r81315 = -r81314;
double r81316 = r81314 * r81314;
double r81317 = 3.0;
double r81318 = a;
double r81319 = r81317 * r81318;
double r81320 = c;
double r81321 = r81319 * r81320;
double r81322 = r81316 - r81321;
double r81323 = sqrt(r81322);
double r81324 = r81315 + r81323;
double r81325 = r81324 / r81319;
return r81325;
}
double f(double a, double b, double c) {
double r81326 = b;
double r81327 = 3.0547987684067384e-17;
bool r81328 = r81326 <= r81327;
double r81329 = r81326 * r81326;
double r81330 = 3.0;
double r81331 = a;
double r81332 = r81330 * r81331;
double r81333 = c;
double r81334 = r81332 * r81333;
double r81335 = r81329 - r81334;
double r81336 = r81335 - r81329;
double r81337 = sqrt(r81335);
double r81338 = r81337 + r81326;
double r81339 = r81336 / r81338;
double r81340 = r81339 / r81330;
double r81341 = r81340 / r81331;
double r81342 = -0.5;
double r81343 = r81333 / r81326;
double r81344 = r81342 * r81343;
double r81345 = r81328 ? r81341 : r81344;
return r81345;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 3.0547987684067384e-17Initial program 21.7
Simplified21.6
rmApplied flip--21.5
Simplified20.7
if 3.0547987684067384e-17 < b Initial program 52.9
Simplified52.9
Taylor expanded around inf 5.9
Final simplification6.2
herbie shell --seed 2019306
(FPCore (a b c)
:name "Cubic critical, wide range"
:precision binary64
:pre (and (< 4.93038e-32 a 2.02824e31) (< 4.93038e-32 b 2.02824e31) (< 4.93038e-32 c 2.02824e31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))