\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 -8.54153886768488832 \cdot 10^{-30}:\\
\;\;\;\;\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 r325 = b;
double r326 = -r325;
double r327 = r325 * r325;
double r328 = 3.0;
double r329 = a;
double r330 = r328 * r329;
double r331 = c;
double r332 = r330 * r331;
double r333 = r327 - r332;
double r334 = sqrt(r333);
double r335 = r326 + r334;
double r336 = r335 / r330;
return r336;
}
double f(double a, double b, double c) {
double r337 = b;
double r338 = -r337;
double r339 = r337 * r337;
double r340 = 3.0;
double r341 = a;
double r342 = r340 * r341;
double r343 = c;
double r344 = r342 * r343;
double r345 = r339 - r344;
double r346 = sqrt(r345);
double r347 = r338 + r346;
double r348 = r347 / r342;
double r349 = -8.541538867684888e-30;
bool r350 = r348 <= r349;
double r351 = -r345;
double r352 = fma(r337, r337, r351);
double r353 = r338 - r346;
double r354 = r352 / r353;
double r355 = r354 / r342;
double r356 = -0.5;
double r357 = r343 / r337;
double r358 = r356 * r357;
double r359 = r350 ? r355 : r358;
return r359;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) < -8.541538867684888e-30Initial program 24.9
rmApplied flip-+24.8
Simplified24.1
if -8.541538867684888e-30 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)) Initial program 61.7
Taylor expanded around inf 0.1
Final simplification6.0
herbie shell --seed 2020025 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))