\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 10.437713474112526:\\
\;\;\;\;\frac{\left(\left(\left(b \cdot b - c \cdot \left(3 \cdot a\right)\right) \cdot \left(b \cdot b - c \cdot \left(3 \cdot a\right)\right)\right) \cdot \left(\left(b \cdot b - c \cdot \left(3 \cdot a\right)\right) \cdot \left(b \cdot b - c \cdot \left(3 \cdot a\right)\right)\right)\right) \cdot \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} - \left(\left(\left(b \cdot b\right) \cdot \left(b \cdot b\right)\right) \cdot \left(\left(b \cdot b\right) \cdot \left(b \cdot b\right)\right)\right) \cdot b}{\left(\left(\left(b \cdot b - c \cdot \left(3 \cdot a\right)\right) \cdot \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)}\right) \cdot \left(\left(b \cdot b - c \cdot \left(3 \cdot a\right)\right) \cdot \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)}\right) + \left(\left(\left(b \cdot b\right) \cdot b\right) \cdot \left(\left(b \cdot b - c \cdot \left(3 \cdot a\right)\right) \cdot \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)}\right) + \left(\left(b \cdot b\right) \cdot b\right) \cdot \left(\left(b \cdot b\right) \cdot b\right)\right)\right) \cdot \left(\left(3 \cdot a\right) \cdot \left(\sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} \cdot \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} + \left(b \cdot b + \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} \cdot b\right)\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot \left(\frac{-3}{2} \cdot b + \frac{\frac{9}{8}}{\frac{\frac{b}{c}}{a}}\right)}{\sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} \cdot b + \left(b \cdot b + \left(b \cdot b - c \cdot \left(3 \cdot a\right)\right)\right)}\\
\end{array}double f(double a, double b, double c, double __attribute__((unused)) d) {
double r16173414 = b;
double r16173415 = -r16173414;
double r16173416 = r16173414 * r16173414;
double r16173417 = 3.0;
double r16173418 = a;
double r16173419 = r16173417 * r16173418;
double r16173420 = c;
double r16173421 = r16173419 * r16173420;
double r16173422 = r16173416 - r16173421;
double r16173423 = sqrt(r16173422);
double r16173424 = r16173415 + r16173423;
double r16173425 = r16173424 / r16173419;
return r16173425;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r16173426 = b;
double r16173427 = 10.437713474112526;
bool r16173428 = r16173426 <= r16173427;
double r16173429 = r16173426 * r16173426;
double r16173430 = c;
double r16173431 = 3.0;
double r16173432 = a;
double r16173433 = r16173431 * r16173432;
double r16173434 = r16173430 * r16173433;
double r16173435 = r16173429 - r16173434;
double r16173436 = r16173435 * r16173435;
double r16173437 = r16173436 * r16173436;
double r16173438 = sqrt(r16173435);
double r16173439 = r16173437 * r16173438;
double r16173440 = r16173429 * r16173429;
double r16173441 = r16173440 * r16173440;
double r16173442 = r16173441 * r16173426;
double r16173443 = r16173439 - r16173442;
double r16173444 = r16173435 * r16173438;
double r16173445 = r16173444 * r16173444;
double r16173446 = r16173429 * r16173426;
double r16173447 = r16173446 * r16173444;
double r16173448 = r16173446 * r16173446;
double r16173449 = r16173447 + r16173448;
double r16173450 = r16173445 + r16173449;
double r16173451 = r16173438 * r16173438;
double r16173452 = r16173438 * r16173426;
double r16173453 = r16173429 + r16173452;
double r16173454 = r16173451 + r16173453;
double r16173455 = r16173433 * r16173454;
double r16173456 = r16173450 * r16173455;
double r16173457 = r16173443 / r16173456;
double r16173458 = -1.5;
double r16173459 = r16173458 * r16173426;
double r16173460 = 1.125;
double r16173461 = r16173426 / r16173430;
double r16173462 = r16173461 / r16173432;
double r16173463 = r16173460 / r16173462;
double r16173464 = r16173459 + r16173463;
double r16173465 = r16173430 * r16173464;
double r16173466 = r16173429 + r16173435;
double r16173467 = r16173452 + r16173466;
double r16173468 = r16173465 / r16173467;
double r16173469 = r16173428 ? r16173457 : r16173468;
return r16173469;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
Results
if b < 10.437713474112526Initial program 13.3
Simplified13.3
rmApplied flip3--13.4
Applied associate-/l/13.4
Simplified12.7
rmApplied flip3--12.8
Applied associate-/l/12.8
Simplified12.5
if 10.437713474112526 < b Initial program 32.7
Simplified32.7
rmApplied flip3--32.8
Applied associate-/l/32.8
Simplified32.2
Taylor expanded around inf 8.1
Simplified8.1
rmApplied associate-/r*8.1
Simplified8.1
Taylor expanded around inf 8.0
Simplified8.0
Final simplification9.0
herbie shell --seed 2019121
(FPCore (a b c d)
:name "Cubic critical, narrow range"
: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)))