\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{1}{\frac{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{c}}double f(double a, double b, double c) {
double r47286 = b;
double r47287 = -r47286;
double r47288 = r47286 * r47286;
double r47289 = 3.0;
double r47290 = a;
double r47291 = r47289 * r47290;
double r47292 = c;
double r47293 = r47291 * r47292;
double r47294 = r47288 - r47293;
double r47295 = sqrt(r47294);
double r47296 = r47287 + r47295;
double r47297 = r47296 / r47291;
return r47297;
}
double f(double a, double b, double c) {
double r47298 = 1.0;
double r47299 = b;
double r47300 = -r47299;
double r47301 = r47299 * r47299;
double r47302 = 3.0;
double r47303 = a;
double r47304 = r47302 * r47303;
double r47305 = c;
double r47306 = r47304 * r47305;
double r47307 = r47301 - r47306;
double r47308 = sqrt(r47307);
double r47309 = r47300 - r47308;
double r47310 = r47309 / r47305;
double r47311 = r47298 / r47310;
return r47311;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 44.1
rmApplied flip-+44.1
Simplified0.5
rmApplied clear-num0.6
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied add-cube-cbrt0.5
Applied times-frac0.5
Applied associate-/l*0.5
Simplified0.3
Final simplification0.3
herbie shell --seed 2019303 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e15) (< 1.11022e-16 b 9.0072e15) (< 1.11022e-16 c 9.0072e15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))