\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 0.02274031798767061:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - a \cdot \left(3 \cdot c\right)\right) \cdot \sqrt{b \cdot b - a \cdot \left(3 \cdot c\right)} - \left(b \cdot b\right) \cdot b}{\left(b \cdot b - a \cdot \left(3 \cdot c\right)\right) + \left(b \cdot \sqrt{b \cdot b - a \cdot \left(3 \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 r1745456 = b;
double r1745457 = -r1745456;
double r1745458 = r1745456 * r1745456;
double r1745459 = 3.0;
double r1745460 = a;
double r1745461 = r1745459 * r1745460;
double r1745462 = c;
double r1745463 = r1745461 * r1745462;
double r1745464 = r1745458 - r1745463;
double r1745465 = sqrt(r1745464);
double r1745466 = r1745457 + r1745465;
double r1745467 = r1745466 / r1745461;
return r1745467;
}
double f(double a, double b, double c) {
double r1745468 = b;
double r1745469 = 0.02274031798767061;
bool r1745470 = r1745468 <= r1745469;
double r1745471 = r1745468 * r1745468;
double r1745472 = a;
double r1745473 = 3.0;
double r1745474 = c;
double r1745475 = r1745473 * r1745474;
double r1745476 = r1745472 * r1745475;
double r1745477 = r1745471 - r1745476;
double r1745478 = sqrt(r1745477);
double r1745479 = r1745477 * r1745478;
double r1745480 = r1745471 * r1745468;
double r1745481 = r1745479 - r1745480;
double r1745482 = r1745468 * r1745478;
double r1745483 = r1745482 + r1745471;
double r1745484 = r1745477 + r1745483;
double r1745485 = r1745481 / r1745484;
double r1745486 = r1745472 * r1745473;
double r1745487 = r1745485 / r1745486;
double r1745488 = -0.5;
double r1745489 = r1745474 / r1745468;
double r1745490 = r1745488 * r1745489;
double r1745491 = r1745470 ? r1745487 : r1745490;
return r1745491;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 0.02274031798767061Initial program 21.9
Simplified21.9
rmApplied flip3--21.9
Simplified21.2
Simplified21.2
if 0.02274031798767061 < b Initial program 46.9
Simplified46.9
Taylor expanded around inf 9.8
Final simplification11.1
herbie shell --seed 2019154
(FPCore (a b c)
:name "Cubic critical, medium range"
:pre (and (< 1.1102230246251565e-16 a 9007199254740992.0) (< 1.1102230246251565e-16 b 9007199254740992.0) (< 1.1102230246251565e-16 c 9007199254740992.0))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))