\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(\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r97081 = b;
double r97082 = -r97081;
double r97083 = r97081 * r97081;
double r97084 = 3.0;
double r97085 = a;
double r97086 = r97084 * r97085;
double r97087 = c;
double r97088 = r97086 * r97087;
double r97089 = r97083 - r97088;
double r97090 = sqrt(r97089);
double r97091 = r97082 + r97090;
double r97092 = r97091 / r97086;
return r97092;
}
double f(double a, double b, double c) {
double r97093 = b;
double r97094 = 2.0;
double r97095 = pow(r97093, r97094);
double r97096 = r97095 - r97095;
double r97097 = 3.0;
double r97098 = a;
double r97099 = r97097 * r97098;
double r97100 = c;
double r97101 = r97099 * r97100;
double r97102 = r97096 + r97101;
double r97103 = -r97093;
double r97104 = r97093 * r97093;
double r97105 = r97104 - r97101;
double r97106 = sqrt(r97105);
double r97107 = r97103 - r97106;
double r97108 = r97099 * r97107;
double r97109 = r97102 / r97108;
return r97109;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.4
rmApplied flip-+52.4
Simplified0.5
rmApplied associate-*r*0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2019318
(FPCore (a b c)
:name "Cubic critical, wide range"
:precision binary64
:pre (and (< 4.93038e-32 a 2.02824e31) (< 4.93038e-32 b 2.02824e31) (< 4.93038e-32 c 2.02824e31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))