\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 0.001901386380797128339975587962840108957607:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}{3}}{a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r64223 = b;
double r64224 = -r64223;
double r64225 = r64223 * r64223;
double r64226 = 3.0;
double r64227 = a;
double r64228 = r64226 * r64227;
double r64229 = c;
double r64230 = r64228 * r64229;
double r64231 = r64225 - r64230;
double r64232 = sqrt(r64231);
double r64233 = r64224 + r64232;
double r64234 = r64233 / r64228;
return r64234;
}
double f(double a, double b, double c) {
double r64235 = b;
double r64236 = 0.0019013863807971283;
bool r64237 = r64235 <= r64236;
double r64238 = r64235 * r64235;
double r64239 = 3.0;
double r64240 = a;
double r64241 = r64239 * r64240;
double r64242 = c;
double r64243 = r64241 * r64242;
double r64244 = r64238 - r64243;
double r64245 = sqrt(r64244);
double r64246 = r64245 - r64235;
double r64247 = r64246 / r64239;
double r64248 = r64247 / r64240;
double r64249 = -0.5;
double r64250 = r64242 / r64235;
double r64251 = r64249 * r64250;
double r64252 = r64237 ? r64248 : r64251;
return r64252;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 0.0019013863807971283Initial program 20.4
rmApplied associate-/r*20.4
Simplified20.4
if 0.0019013863807971283 < b Initial program 46.4
Taylor expanded around inf 10.1
Final simplification11.0
herbie shell --seed 2019208 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e15) (< 1.11022e-16 b 9.0072e15) (< 1.11022e-16 c 9.0072e15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))