\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\left({b}^{2} - {b}^{2}\right) + \left(3 \cdot a\right) \cdot c}{\left(3 \cdot a\right) \cdot \left(-b\right) + \left(3 \cdot a\right) \cdot \left(-\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r100953 = b;
double r100954 = -r100953;
double r100955 = r100953 * r100953;
double r100956 = 3.0;
double r100957 = a;
double r100958 = r100956 * r100957;
double r100959 = c;
double r100960 = r100958 * r100959;
double r100961 = r100955 - r100960;
double r100962 = sqrt(r100961);
double r100963 = r100954 + r100962;
double r100964 = r100963 / r100958;
return r100964;
}
double f(double a, double b, double c) {
double r100965 = b;
double r100966 = 2.0;
double r100967 = pow(r100965, r100966);
double r100968 = r100967 - r100967;
double r100969 = 3.0;
double r100970 = a;
double r100971 = r100969 * r100970;
double r100972 = c;
double r100973 = r100971 * r100972;
double r100974 = r100968 + r100973;
double r100975 = -r100965;
double r100976 = r100971 * r100975;
double r100977 = r100965 * r100965;
double r100978 = r100977 - r100973;
double r100979 = sqrt(r100978);
double r100980 = -r100979;
double r100981 = r100971 * r100980;
double r100982 = r100976 + r100981;
double r100983 = r100974 / r100982;
return r100983;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.5
rmApplied flip-+52.4
Simplified0.5
rmApplied associate-*r*0.4
rmApplied div-inv0.4
Applied associate-/l*0.4
Simplified0.4
rmApplied sub-neg0.4
Applied distribute-lft-in0.4
Final simplification0.4
herbie shell --seed 2020002
(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)))