\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{1}{\frac{3 \cdot a}{\frac{\left(3 \cdot a\right) \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}}double f(double a, double b, double c) {
double r77714 = b;
double r77715 = -r77714;
double r77716 = r77714 * r77714;
double r77717 = 3.0;
double r77718 = a;
double r77719 = r77717 * r77718;
double r77720 = c;
double r77721 = r77719 * r77720;
double r77722 = r77716 - r77721;
double r77723 = sqrt(r77722);
double r77724 = r77715 + r77723;
double r77725 = r77724 / r77719;
return r77725;
}
double f(double a, double b, double c) {
double r77726 = 1.0;
double r77727 = 3.0;
double r77728 = a;
double r77729 = r77727 * r77728;
double r77730 = c;
double r77731 = r77729 * r77730;
double r77732 = b;
double r77733 = -r77732;
double r77734 = r77732 * r77732;
double r77735 = r77734 - r77731;
double r77736 = sqrt(r77735);
double r77737 = r77733 - r77736;
double r77738 = r77731 / r77737;
double r77739 = r77729 / r77738;
double r77740 = r77726 / r77739;
return r77740;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.4
rmApplied flip-+28.4
Simplified0.6
rmApplied *-un-lft-identity0.6
Applied *-un-lft-identity0.6
Applied times-frac0.6
Applied associate-/l*0.6
Simplified0.5
Final simplification0.5
herbie shell --seed 2019323 +o rules:numerics
(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)))