\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{\frac{4 \cdot \left(a \cdot c\right)}{2}}{a}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r36388 = b;
double r36389 = -r36388;
double r36390 = r36388 * r36388;
double r36391 = 4.0;
double r36392 = a;
double r36393 = r36391 * r36392;
double r36394 = c;
double r36395 = r36393 * r36394;
double r36396 = r36390 - r36395;
double r36397 = sqrt(r36396);
double r36398 = r36389 + r36397;
double r36399 = 2.0;
double r36400 = r36399 * r36392;
double r36401 = r36398 / r36400;
return r36401;
}
double f(double a, double b, double c) {
double r36402 = 4.0;
double r36403 = a;
double r36404 = c;
double r36405 = r36403 * r36404;
double r36406 = r36402 * r36405;
double r36407 = 2.0;
double r36408 = r36406 / r36407;
double r36409 = r36408 / r36403;
double r36410 = b;
double r36411 = -r36410;
double r36412 = r36410 * r36410;
double r36413 = r36402 * r36403;
double r36414 = r36413 * r36404;
double r36415 = r36412 - r36414;
double r36416 = sqrt(r36415);
double r36417 = r36411 - r36416;
double r36418 = r36409 / r36417;
return r36418;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.6
rmApplied flip-+43.6
Simplified0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied associate-/r*0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020039 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))