\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\frac{a}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}} \cdot c}{a}double f(double a, double b, double c) {
double r80186 = b;
double r80187 = -r80186;
double r80188 = r80186 * r80186;
double r80189 = 3.0;
double r80190 = a;
double r80191 = r80189 * r80190;
double r80192 = c;
double r80193 = r80191 * r80192;
double r80194 = r80188 - r80193;
double r80195 = sqrt(r80194);
double r80196 = r80187 + r80195;
double r80197 = r80196 / r80191;
return r80197;
}
double f(double a, double b, double c) {
double r80198 = a;
double r80199 = b;
double r80200 = -r80199;
double r80201 = r80199 * r80199;
double r80202 = 3.0;
double r80203 = r80202 * r80198;
double r80204 = c;
double r80205 = r80203 * r80204;
double r80206 = r80201 - r80205;
double r80207 = sqrt(r80206);
double r80208 = r80200 - r80207;
double r80209 = r80198 / r80208;
double r80210 = r80209 * r80204;
double r80211 = r80210 / r80198;
return r80211;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.7
rmApplied flip-+28.7
Simplified0.6
rmApplied *-un-lft-identity0.6
Applied *-un-lft-identity0.6
Applied times-frac0.6
Applied times-frac0.6
Simplified0.6
Simplified0.6
rmApplied *-un-lft-identity0.6
Applied div-inv0.6
Applied times-frac0.6
Applied associate-*r*0.7
Simplified0.6
rmApplied associate-*r/0.6
Simplified0.4
Final simplification0.4
herbie shell --seed 2019351 +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)))