\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r34254 = b;
double r34255 = -r34254;
double r34256 = r34254 * r34254;
double r34257 = 4.0;
double r34258 = a;
double r34259 = r34257 * r34258;
double r34260 = c;
double r34261 = r34259 * r34260;
double r34262 = r34256 - r34261;
double r34263 = sqrt(r34262);
double r34264 = r34255 + r34263;
double r34265 = 2.0;
double r34266 = r34265 * r34258;
double r34267 = r34264 / r34266;
return r34267;
}
double f(double a, double b, double c) {
double r34268 = 2.0;
double r34269 = c;
double r34270 = r34268 * r34269;
double r34271 = b;
double r34272 = -r34271;
double r34273 = r34271 * r34271;
double r34274 = 4.0;
double r34275 = a;
double r34276 = r34274 * r34275;
double r34277 = r34276 * r34269;
double r34278 = r34273 - r34277;
double r34279 = sqrt(r34278);
double r34280 = r34272 - r34279;
double r34281 = r34270 / r34280;
return r34281;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.9
rmApplied flip-+52.9
Simplified0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied associate-/r*0.2
Simplified0.2
Taylor expanded around 0 0.1
Final simplification0.1
herbie shell --seed 2019352 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, 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) (* (* 4 a) c)))) (* 2 a)))