\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\frac{1 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{a}double f(double a, double b, double c) {
double r119711 = b;
double r119712 = -r119711;
double r119713 = r119711 * r119711;
double r119714 = 3.0;
double r119715 = a;
double r119716 = r119714 * r119715;
double r119717 = c;
double r119718 = r119716 * r119717;
double r119719 = r119713 - r119718;
double r119720 = sqrt(r119719);
double r119721 = r119712 + r119720;
double r119722 = r119721 / r119716;
return r119722;
}
double f(double a, double b, double c) {
double r119723 = 1.0;
double r119724 = a;
double r119725 = c;
double r119726 = r119724 * r119725;
double r119727 = r119723 * r119726;
double r119728 = b;
double r119729 = -r119728;
double r119730 = r119728 * r119728;
double r119731 = 3.0;
double r119732 = r119731 * r119724;
double r119733 = r119732 * r119725;
double r119734 = r119730 - r119733;
double r119735 = sqrt(r119734);
double r119736 = r119729 - r119735;
double r119737 = r119727 / r119736;
double r119738 = r119737 / r119724;
return r119738;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.6
rmApplied flip-+43.6
Simplified0.5
rmApplied associate-/r*0.5
Simplified0.5
Taylor expanded around 0 0.4
Final simplification0.4
herbie shell --seed 2020033
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))