\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}-\frac{3 \cdot a}{\frac{-3 \cdot a}{\frac{c}{\left(-b\right) - \sqrt{b \cdot b - \sqrt[3]{\left(\left(\left(3 \cdot a\right) \cdot c\right) \cdot \left(\left(3 \cdot a\right) \cdot c\right)\right) \cdot \left(\left(3 \cdot a\right) \cdot c\right)}}}}}double f(double a, double b, double c) {
double r174577 = b;
double r174578 = -r174577;
double r174579 = r174577 * r174577;
double r174580 = 3.0;
double r174581 = a;
double r174582 = r174580 * r174581;
double r174583 = c;
double r174584 = r174582 * r174583;
double r174585 = r174579 - r174584;
double r174586 = sqrt(r174585);
double r174587 = r174578 + r174586;
double r174588 = r174587 / r174582;
return r174588;
}
double f(double a, double b, double c) {
double r174589 = 3.0;
double r174590 = a;
double r174591 = r174589 * r174590;
double r174592 = -r174591;
double r174593 = c;
double r174594 = b;
double r174595 = -r174594;
double r174596 = r174594 * r174594;
double r174597 = r174591 * r174593;
double r174598 = r174597 * r174597;
double r174599 = r174598 * r174597;
double r174600 = cbrt(r174599);
double r174601 = r174596 - r174600;
double r174602 = sqrt(r174601);
double r174603 = r174595 - r174602;
double r174604 = r174593 / r174603;
double r174605 = r174592 / r174604;
double r174606 = r174591 / r174605;
double r174607 = -r174606;
return r174607;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.4
rmApplied flip-+28.3
Simplified0.6
rmApplied frac-2neg0.6
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied distribute-lft-neg-in0.5
Applied times-frac0.3
Applied associate-/l*0.3
rmApplied add-cbrt-cube0.3
Final simplification0.3
herbie shell --seed 2020060
(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)))