\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{\frac{\left(4 \cdot a\right) \cdot c}{2}}{a}}{\left(-b\right) - \sqrt{\frac{{b}^{6} - {\left(\left(4 \cdot a\right) \cdot c\right)}^{3}}{\mathsf{fma}\left(4, \left(a \cdot c\right) \cdot \mathsf{fma}\left(b, b, \left(4 \cdot a\right) \cdot c\right), {b}^{4}\right)}}}double f(double a, double b, double c) {
double r36407 = b;
double r36408 = -r36407;
double r36409 = r36407 * r36407;
double r36410 = 4.0;
double r36411 = a;
double r36412 = r36410 * r36411;
double r36413 = c;
double r36414 = r36412 * r36413;
double r36415 = r36409 - r36414;
double r36416 = sqrt(r36415);
double r36417 = r36408 + r36416;
double r36418 = 2.0;
double r36419 = r36418 * r36411;
double r36420 = r36417 / r36419;
return r36420;
}
double f(double a, double b, double c) {
double r36421 = 4.0;
double r36422 = a;
double r36423 = r36421 * r36422;
double r36424 = c;
double r36425 = r36423 * r36424;
double r36426 = 2.0;
double r36427 = r36425 / r36426;
double r36428 = r36427 / r36422;
double r36429 = b;
double r36430 = -r36429;
double r36431 = 6.0;
double r36432 = pow(r36429, r36431);
double r36433 = 3.0;
double r36434 = pow(r36425, r36433);
double r36435 = r36432 - r36434;
double r36436 = r36422 * r36424;
double r36437 = fma(r36429, r36429, r36425);
double r36438 = r36436 * r36437;
double r36439 = 4.0;
double r36440 = pow(r36429, r36439);
double r36441 = fma(r36421, r36438, r36440);
double r36442 = r36435 / r36441;
double r36443 = sqrt(r36442);
double r36444 = r36430 - r36443;
double r36445 = r36428 / r36444;
return r36445;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 43.7
rmApplied flip-+43.7
Simplified0.4
rmApplied flip3--0.4
Simplified0.4
Simplified0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied associate-/r*0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020046 +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)))