\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{b \cdot \left(b - b\right) + 4 \cdot \left(a \cdot c\right)}{\left(\left(-b\right) - \left|\frac{\sqrt{{b}^{4} - \left(4 \cdot \left(a \cdot c\right)\right) \cdot \left(4 \cdot \left(a \cdot c\right)\right)}}{\sqrt{b \cdot b + \left(4 \cdot a\right) \cdot c}}\right|\right) \cdot \left(2 \cdot a\right)}double f(double a, double b, double c) {
double r37610 = b;
double r37611 = -r37610;
double r37612 = r37610 * r37610;
double r37613 = 4.0;
double r37614 = a;
double r37615 = r37613 * r37614;
double r37616 = c;
double r37617 = r37615 * r37616;
double r37618 = r37612 - r37617;
double r37619 = sqrt(r37618);
double r37620 = r37611 + r37619;
double r37621 = 2.0;
double r37622 = r37621 * r37614;
double r37623 = r37620 / r37622;
return r37623;
}
double f(double a, double b, double c) {
double r37624 = b;
double r37625 = r37624 - r37624;
double r37626 = r37624 * r37625;
double r37627 = 4.0;
double r37628 = a;
double r37629 = c;
double r37630 = r37628 * r37629;
double r37631 = r37627 * r37630;
double r37632 = r37626 + r37631;
double r37633 = -r37624;
double r37634 = 4.0;
double r37635 = pow(r37624, r37634);
double r37636 = r37631 * r37631;
double r37637 = r37635 - r37636;
double r37638 = sqrt(r37637);
double r37639 = r37624 * r37624;
double r37640 = r37627 * r37628;
double r37641 = r37640 * r37629;
double r37642 = r37639 + r37641;
double r37643 = sqrt(r37642);
double r37644 = r37638 / r37643;
double r37645 = fabs(r37644);
double r37646 = r37633 - r37645;
double r37647 = 2.0;
double r37648 = r37647 * r37628;
double r37649 = r37646 * r37648;
double r37650 = r37632 / r37649;
return r37650;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.7
rmApplied flip-+43.7
Simplified0.4
rmApplied flip--0.4
Simplified0.4
rmApplied add-sqr-sqrt0.4
Applied add-sqr-sqrt0.4
Applied times-frac0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2020047
(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)))