\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 r96062 = b;
double r96063 = -r96062;
double r96064 = r96062 * r96062;
double r96065 = 3.0;
double r96066 = a;
double r96067 = r96065 * r96066;
double r96068 = c;
double r96069 = r96067 * r96068;
double r96070 = r96064 - r96069;
double r96071 = sqrt(r96070);
double r96072 = r96063 + r96071;
double r96073 = r96072 / r96067;
return r96073;
}
double f(double a, double b, double c) {
double r96074 = b;
double r96075 = 2.0;
double r96076 = pow(r96074, r96075);
double r96077 = r96076 - r96076;
double r96078 = 3.0;
double r96079 = a;
double r96080 = r96078 * r96079;
double r96081 = c;
double r96082 = r96080 * r96081;
double r96083 = r96077 + r96082;
double r96084 = -r96074;
double r96085 = r96080 * r96084;
double r96086 = r96074 * r96074;
double r96087 = r96086 - r96082;
double r96088 = sqrt(r96087);
double r96089 = -r96088;
double r96090 = r96080 * r96089;
double r96091 = r96085 + r96090;
double r96092 = r96083 / r96091;
return r96092;
}



Bits error versus a



Bits error versus b



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