\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{\frac{4 \cdot \left(a \cdot c\right)}{a}}{-\left(b + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r42448 = b;
double r42449 = -r42448;
double r42450 = r42448 * r42448;
double r42451 = 4.0;
double r42452 = a;
double r42453 = r42451 * r42452;
double r42454 = c;
double r42455 = r42453 * r42454;
double r42456 = r42450 - r42455;
double r42457 = sqrt(r42456);
double r42458 = r42449 + r42457;
double r42459 = 2.0;
double r42460 = r42459 * r42452;
double r42461 = r42458 / r42460;
return r42461;
}
double f(double a, double b, double c) {
double r42462 = 1.0;
double r42463 = 2.0;
double r42464 = r42462 / r42463;
double r42465 = 4.0;
double r42466 = a;
double r42467 = c;
double r42468 = r42466 * r42467;
double r42469 = r42465 * r42468;
double r42470 = r42469 / r42466;
double r42471 = b;
double r42472 = r42471 * r42471;
double r42473 = r42465 * r42466;
double r42474 = r42473 * r42467;
double r42475 = r42472 - r42474;
double r42476 = sqrt(r42475);
double r42477 = r42471 + r42476;
double r42478 = -r42477;
double r42479 = r42470 / r42478;
double r42480 = r42464 * r42479;
return r42480;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.6
rmApplied flip-+43.7
Simplified0.4
rmApplied add-sqr-sqrt0.5
Applied distribute-lft-neg-in0.5
Applied fma-neg0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.2
Final simplification0.2
herbie shell --seed 2020024 +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)))