\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{4 \cdot \left(a \cdot c\right)}{\left(2 \cdot a\right) \cdot \left(\left(-b\right) - \sqrt{\frac{{b}^{6} - {\left(\left(4 \cdot a\right) \cdot c\right)}^{3}}{\left(\left(4 \cdot a\right) \cdot c\right) \cdot \left(\left(4 \cdot a\right) \cdot c + {b}^{2}\right) + \left(b \cdot b\right) \cdot \left(b \cdot b\right)}}\right)}double f(double a, double b, double c) {
double r45608 = b;
double r45609 = -r45608;
double r45610 = r45608 * r45608;
double r45611 = 4.0;
double r45612 = a;
double r45613 = r45611 * r45612;
double r45614 = c;
double r45615 = r45613 * r45614;
double r45616 = r45610 - r45615;
double r45617 = sqrt(r45616);
double r45618 = r45609 + r45617;
double r45619 = 2.0;
double r45620 = r45619 * r45612;
double r45621 = r45618 / r45620;
return r45621;
}
double f(double a, double b, double c) {
double r45622 = 4.0;
double r45623 = a;
double r45624 = c;
double r45625 = r45623 * r45624;
double r45626 = r45622 * r45625;
double r45627 = 2.0;
double r45628 = r45627 * r45623;
double r45629 = b;
double r45630 = -r45629;
double r45631 = 6.0;
double r45632 = pow(r45629, r45631);
double r45633 = r45622 * r45623;
double r45634 = r45633 * r45624;
double r45635 = 3.0;
double r45636 = pow(r45634, r45635);
double r45637 = r45632 - r45636;
double r45638 = 2.0;
double r45639 = pow(r45629, r45638);
double r45640 = r45634 + r45639;
double r45641 = r45634 * r45640;
double r45642 = r45629 * r45629;
double r45643 = r45642 * r45642;
double r45644 = r45641 + r45643;
double r45645 = r45637 / r45644;
double r45646 = sqrt(r45645);
double r45647 = r45630 - r45646;
double r45648 = r45628 * r45647;
double r45649 = r45626 / r45648;
return r45649;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.4
rmApplied flip-+28.5
Simplified0.5
rmApplied flip3--0.5
Simplified0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019308
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:precision binary64
:pre (and (< 1.05367121277235087e-8 a 94906265.6242515594) (< 1.05367121277235087e-8 b 94906265.6242515594) (< 1.05367121277235087e-8 c 94906265.6242515594))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))