\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{4}{\frac{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}{c}}double f(double a, double b, double c) {
double r35448 = b;
double r35449 = -r35448;
double r35450 = r35448 * r35448;
double r35451 = 4.0;
double r35452 = a;
double r35453 = r35451 * r35452;
double r35454 = c;
double r35455 = r35453 * r35454;
double r35456 = r35450 - r35455;
double r35457 = sqrt(r35456);
double r35458 = r35449 + r35457;
double r35459 = 2.0;
double r35460 = r35459 * r35452;
double r35461 = r35458 / r35460;
return r35461;
}
double f(double a, double b, double c) {
double r35462 = 1.0;
double r35463 = 2.0;
double r35464 = r35462 / r35463;
double r35465 = 4.0;
double r35466 = b;
double r35467 = -r35466;
double r35468 = r35466 * r35466;
double r35469 = a;
double r35470 = r35465 * r35469;
double r35471 = c;
double r35472 = r35470 * r35471;
double r35473 = r35468 - r35472;
double r35474 = sqrt(r35473);
double r35475 = r35467 - r35474;
double r35476 = r35462 * r35475;
double r35477 = r35476 / r35471;
double r35478 = r35465 / r35477;
double r35479 = r35464 * r35478;
return r35479;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.7
rmApplied flip-+28.8
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Simplified0.5
rmApplied associate-/l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2020049
(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)))