\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{c \cdot 1}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r75474 = b;
double r75475 = -r75474;
double r75476 = r75474 * r75474;
double r75477 = 3.0;
double r75478 = a;
double r75479 = r75477 * r75478;
double r75480 = c;
double r75481 = r75479 * r75480;
double r75482 = r75476 - r75481;
double r75483 = sqrt(r75482);
double r75484 = r75475 + r75483;
double r75485 = r75484 / r75479;
return r75485;
}
double f(double a, double b, double c) {
double r75486 = c;
double r75487 = 1.0;
double r75488 = r75486 * r75487;
double r75489 = b;
double r75490 = -r75489;
double r75491 = r75489 * r75489;
double r75492 = 3.0;
double r75493 = a;
double r75494 = r75492 * r75493;
double r75495 = r75494 * r75486;
double r75496 = r75491 - r75495;
double r75497 = sqrt(r75496);
double r75498 = r75490 - r75497;
double r75499 = r75488 / r75498;
return r75499;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.6
rmApplied flip-+28.6
Simplified0.6
rmApplied associate-/r*0.5
Simplified0.5
Taylor expanded around 0 0.4
Final simplification0.3
herbie shell --seed 2019291
(FPCore (a b c)
:name "Cubic critical, narrow range"
:precision binary64
:pre (and (< 1.05367121277235087e-8 a 94906265.6242515594) (< 1.05367121277235087e-8 b 94906265.6242515594) (< 1.05367121277235087e-8 c 94906265.6242515594))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))