\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 401.040135740652715412579709663987159729:\\
\;\;\;\;\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, \left(3 \cdot a\right) \cdot c\right)}{b + \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 r62049 = b;
double r62050 = -r62049;
double r62051 = r62049 * r62049;
double r62052 = 3.0;
double r62053 = a;
double r62054 = r62052 * r62053;
double r62055 = c;
double r62056 = r62054 * r62055;
double r62057 = r62051 - r62056;
double r62058 = sqrt(r62057);
double r62059 = r62050 + r62058;
double r62060 = r62059 / r62054;
return r62060;
}
double f(double a, double b, double c) {
double r62061 = b;
double r62062 = 401.0401357406527;
bool r62063 = r62061 <= r62062;
double r62064 = r62061 * r62061;
double r62065 = 3.0;
double r62066 = a;
double r62067 = r62065 * r62066;
double r62068 = c;
double r62069 = r62067 * r62068;
double r62070 = fma(r62061, r62061, r62069);
double r62071 = r62064 - r62070;
double r62072 = r62064 - r62069;
double r62073 = sqrt(r62072);
double r62074 = r62061 + r62073;
double r62075 = r62071 / r62074;
double r62076 = r62075 / r62067;
double r62077 = -0.5;
double r62078 = r62068 / r62061;
double r62079 = r62077 * r62078;
double r62080 = r62063 ? r62076 : r62079;
return r62080;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 401.0401357406527Initial program 16.4
Simplified16.4
rmApplied flip--16.4
Simplified15.7
Simplified15.7
if 401.0401357406527 < b Initial program 35.2
Simplified35.2
Taylor expanded around inf 17.1
Final simplification16.6
herbie shell --seed 2019323 +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)))