\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.0015085102264598175:\\
\;\;\;\;\frac{\left(b \cdot b - c \cdot \left(3 \cdot a\right)\right) \cdot \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} - \left(b \cdot b\right) \cdot b}{\left(3 \cdot a\right) \cdot \left(\left(b \cdot \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} + b \cdot b\right) + \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} \cdot \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c, double __attribute__((unused)) d) {
double r14415263 = b;
double r14415264 = -r14415263;
double r14415265 = r14415263 * r14415263;
double r14415266 = 3.0;
double r14415267 = a;
double r14415268 = r14415266 * r14415267;
double r14415269 = c;
double r14415270 = r14415268 * r14415269;
double r14415271 = r14415265 - r14415270;
double r14415272 = sqrt(r14415271);
double r14415273 = r14415264 + r14415272;
double r14415274 = r14415273 / r14415268;
return r14415274;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r14415275 = b;
double r14415276 = 0.0015085102264598175;
bool r14415277 = r14415275 <= r14415276;
double r14415278 = r14415275 * r14415275;
double r14415279 = c;
double r14415280 = 3.0;
double r14415281 = a;
double r14415282 = r14415280 * r14415281;
double r14415283 = r14415279 * r14415282;
double r14415284 = r14415278 - r14415283;
double r14415285 = sqrt(r14415284);
double r14415286 = r14415284 * r14415285;
double r14415287 = r14415278 * r14415275;
double r14415288 = r14415286 - r14415287;
double r14415289 = r14415275 * r14415285;
double r14415290 = r14415289 + r14415278;
double r14415291 = r14415285 * r14415285;
double r14415292 = r14415290 + r14415291;
double r14415293 = r14415282 * r14415292;
double r14415294 = r14415288 / r14415293;
double r14415295 = -0.5;
double r14415296 = r14415279 / r14415275;
double r14415297 = r14415295 * r14415296;
double r14415298 = r14415277 ? r14415294 : r14415297;
return r14415298;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
Results
if b < 0.0015085102264598175Initial program 20.6
Simplified20.6
rmApplied flip3--20.7
Applied associate-/l/20.7
Simplified20.0
if 0.0015085102264598175 < b Initial program 45.9
Simplified45.9
Taylor expanded around inf 10.5
Final simplification11.3
herbie shell --seed 2019119
(FPCore (a b c d)
: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)))