\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\frac{\frac{a \cdot c}{1}}{a}}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r84197 = b;
double r84198 = -r84197;
double r84199 = r84197 * r84197;
double r84200 = 3.0;
double r84201 = a;
double r84202 = r84200 * r84201;
double r84203 = c;
double r84204 = r84202 * r84203;
double r84205 = r84199 - r84204;
double r84206 = sqrt(r84205);
double r84207 = r84198 + r84206;
double r84208 = r84207 / r84202;
return r84208;
}
double f(double a, double b, double c) {
double r84209 = a;
double r84210 = c;
double r84211 = r84209 * r84210;
double r84212 = 1.0;
double r84213 = r84211 / r84212;
double r84214 = r84213 / r84209;
double r84215 = b;
double r84216 = -r84215;
double r84217 = r84215 * r84215;
double r84218 = 3.0;
double r84219 = r84218 * r84209;
double r84220 = r84219 * r84210;
double r84221 = r84217 - r84220;
double r84222 = sqrt(r84221);
double r84223 = r84216 - r84222;
double r84224 = r84214 / r84223;
return r84224;
}



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.5
Simplified0.5
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.5
rmApplied associate-/r*0.3
Simplified0.2
Final simplification0.2
herbie shell --seed 2019353
(FPCore (a b c)
:name "Cubic critical, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))