\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 -1.450958961586127673982441615985194971472 \cdot 10^{-5}:\\
\;\;\;\;\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 r96981 = b;
double r96982 = -r96981;
double r96983 = r96981 * r96981;
double r96984 = 3.0;
double r96985 = a;
double r96986 = r96984 * r96985;
double r96987 = c;
double r96988 = r96986 * r96987;
double r96989 = r96983 - r96988;
double r96990 = sqrt(r96989);
double r96991 = r96982 + r96990;
double r96992 = r96991 / r96986;
return r96992;
}
double f(double a, double b, double c) {
double r96993 = b;
double r96994 = -r96993;
double r96995 = r96993 * r96993;
double r96996 = 3.0;
double r96997 = a;
double r96998 = r96996 * r96997;
double r96999 = c;
double r97000 = r96998 * r96999;
double r97001 = r96995 - r97000;
double r97002 = sqrt(r97001);
double r97003 = r96994 + r97002;
double r97004 = r97003 / r96998;
double r97005 = -1.4509589615861277e-05;
bool r97006 = r97004 <= r97005;
double r97007 = -r97001;
double r97008 = fma(r96993, r96993, r97007);
double r97009 = r96994 - r97002;
double r97010 = r97008 / r97009;
double r97011 = r97010 / r96998;
double r97012 = -0.5;
double r97013 = r96999 / r96993;
double r97014 = r97012 * r97013;
double r97015 = r97006 ? r97011 : r97014;
return r97015;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -1.4509589615861277e-05Initial program 17.1
rmApplied flip-+17.0
Simplified16.2
if -1.4509589615861277e-05 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 39.2
Taylor expanded around inf 14.0
Final simplification15.1
herbie shell --seed 2020002 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, narrow range"
:precision binary64
: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)))