\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{4 \cdot c}{-\left(b + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r34582 = b;
double r34583 = -r34582;
double r34584 = r34582 * r34582;
double r34585 = 4.0;
double r34586 = a;
double r34587 = r34585 * r34586;
double r34588 = c;
double r34589 = r34587 * r34588;
double r34590 = r34584 - r34589;
double r34591 = sqrt(r34590);
double r34592 = r34583 + r34591;
double r34593 = 2.0;
double r34594 = r34593 * r34586;
double r34595 = r34592 / r34594;
return r34595;
}
double f(double a, double b, double c) {
double r34596 = 1.0;
double r34597 = 2.0;
double r34598 = r34596 / r34597;
double r34599 = 4.0;
double r34600 = c;
double r34601 = r34599 * r34600;
double r34602 = b;
double r34603 = r34602 * r34602;
double r34604 = a;
double r34605 = r34599 * r34604;
double r34606 = r34605 * r34600;
double r34607 = r34603 - r34606;
double r34608 = sqrt(r34607);
double r34609 = r34602 + r34608;
double r34610 = -r34609;
double r34611 = r34601 / r34610;
double r34612 = r34598 * r34611;
return r34612;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.3
rmApplied flip-+28.4
Simplified0.5
rmApplied add-cbrt-cube0.5
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied associate-/r*0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2020025
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:precision binary64
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))