\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 1271.296575229969:\\
\;\;\;\;\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 r10064550 = b;
double r10064551 = -r10064550;
double r10064552 = r10064550 * r10064550;
double r10064553 = 3.0;
double r10064554 = a;
double r10064555 = r10064553 * r10064554;
double r10064556 = c;
double r10064557 = r10064555 * r10064556;
double r10064558 = r10064552 - r10064557;
double r10064559 = sqrt(r10064558);
double r10064560 = r10064551 + r10064559;
double r10064561 = r10064560 / r10064555;
return r10064561;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r10064562 = b;
double r10064563 = 1271.296575229969;
bool r10064564 = r10064562 <= r10064563;
double r10064565 = r10064562 * r10064562;
double r10064566 = c;
double r10064567 = 3.0;
double r10064568 = a;
double r10064569 = r10064567 * r10064568;
double r10064570 = r10064566 * r10064569;
double r10064571 = r10064565 - r10064570;
double r10064572 = sqrt(r10064571);
double r10064573 = r10064571 * r10064572;
double r10064574 = r10064565 * r10064562;
double r10064575 = r10064573 - r10064574;
double r10064576 = r10064562 * r10064572;
double r10064577 = r10064576 + r10064565;
double r10064578 = r10064572 * r10064572;
double r10064579 = r10064577 + r10064578;
double r10064580 = r10064569 * r10064579;
double r10064581 = r10064575 / r10064580;
double r10064582 = -0.5;
double r10064583 = r10064566 / r10064562;
double r10064584 = r10064582 * r10064583;
double r10064585 = r10064564 ? r10064581 : r10064584;
return r10064585;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
Results
if b < 1271.296575229969Initial program 17.1
Simplified17.1
rmApplied flip3--17.2
Applied associate-/l/17.2
Simplified16.6
if 1271.296575229969 < b Initial program 36.8
Simplified36.8
Taylor expanded around inf 15.9
Final simplification16.2
herbie shell --seed 2019107
(FPCore (a b c d)
: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)))