\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c}}{a \cdot 3} \le -9.145157459673636059552769006497641157694 \cdot 10^{-6}:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - \left(a \cdot 3\right) \cdot c\right) \cdot \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} - b \cdot \left(b \cdot b\right)}{b \cdot \sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} + \left(\left(b \cdot b - \left(a \cdot 3\right) \cdot c\right) + b \cdot b\right)}}{a \cdot 3}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r3719467 = b;
double r3719468 = -r3719467;
double r3719469 = r3719467 * r3719467;
double r3719470 = 3.0;
double r3719471 = a;
double r3719472 = r3719470 * r3719471;
double r3719473 = c;
double r3719474 = r3719472 * r3719473;
double r3719475 = r3719469 - r3719474;
double r3719476 = sqrt(r3719475);
double r3719477 = r3719468 + r3719476;
double r3719478 = r3719477 / r3719472;
return r3719478;
}
double f(double a, double b, double c) {
double r3719479 = b;
double r3719480 = -r3719479;
double r3719481 = r3719479 * r3719479;
double r3719482 = a;
double r3719483 = 3.0;
double r3719484 = r3719482 * r3719483;
double r3719485 = c;
double r3719486 = r3719484 * r3719485;
double r3719487 = r3719481 - r3719486;
double r3719488 = sqrt(r3719487);
double r3719489 = r3719480 + r3719488;
double r3719490 = r3719489 / r3719484;
double r3719491 = -9.145157459673636e-06;
bool r3719492 = r3719490 <= r3719491;
double r3719493 = r3719487 * r3719488;
double r3719494 = r3719479 * r3719481;
double r3719495 = r3719493 - r3719494;
double r3719496 = r3719479 * r3719488;
double r3719497 = r3719487 + r3719481;
double r3719498 = r3719496 + r3719497;
double r3719499 = r3719495 / r3719498;
double r3719500 = r3719499 / r3719484;
double r3719501 = -0.5;
double r3719502 = r3719485 / r3719479;
double r3719503 = r3719501 * r3719502;
double r3719504 = r3719492 ? r3719500 : r3719503;
return r3719504;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -9.145157459673636e-06Initial program 17.2
rmApplied flip3-+17.2
Simplified16.6
Simplified16.6
if -9.145157459673636e-06 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 40.8
Taylor expanded around inf 12.7
Final simplification14.6
herbie shell --seed 2019200
(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.0 a) c)))) (* 3.0 a)))