\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(3 \cdot a\right) \cdot c}}{3 \cdot a} \le -0.058976256106294728:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(b, b, -\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right)\right)}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r123326 = b;
double r123327 = -r123326;
double r123328 = r123326 * r123326;
double r123329 = 3.0;
double r123330 = a;
double r123331 = r123329 * r123330;
double r123332 = c;
double r123333 = r123331 * r123332;
double r123334 = r123328 - r123333;
double r123335 = sqrt(r123334);
double r123336 = r123327 + r123335;
double r123337 = r123336 / r123331;
return r123337;
}
double f(double a, double b, double c) {
double r123338 = b;
double r123339 = -r123338;
double r123340 = r123338 * r123338;
double r123341 = 3.0;
double r123342 = a;
double r123343 = r123341 * r123342;
double r123344 = c;
double r123345 = r123343 * r123344;
double r123346 = r123340 - r123345;
double r123347 = sqrt(r123346);
double r123348 = r123339 + r123347;
double r123349 = r123348 / r123343;
double r123350 = -0.05897625610629473;
bool r123351 = r123349 <= r123350;
double r123352 = -r123346;
double r123353 = fma(r123338, r123338, r123352);
double r123354 = r123339 - r123347;
double r123355 = r123353 / r123354;
double r123356 = r123355 / r123343;
double r123357 = -0.5;
double r123358 = r123344 / r123338;
double r123359 = r123357 * r123358;
double r123360 = r123351 ? r123356 : r123359;
return r123360;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -0.05897625610629473Initial program 19.4
rmApplied flip-+19.5
Simplified18.7
if -0.05897625610629473 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 48.6
Taylor expanded around inf 8.5
Final simplification10.3
herbie shell --seed 2020057 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))