\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 \left(a \cdot c\right)}{a \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r37267 = b;
double r37268 = -r37267;
double r37269 = r37267 * r37267;
double r37270 = 4.0;
double r37271 = a;
double r37272 = r37270 * r37271;
double r37273 = c;
double r37274 = r37272 * r37273;
double r37275 = r37269 - r37274;
double r37276 = sqrt(r37275);
double r37277 = r37268 + r37276;
double r37278 = 2.0;
double r37279 = r37278 * r37271;
double r37280 = r37277 / r37279;
return r37280;
}
double f(double a, double b, double c) {
double r37281 = 1.0;
double r37282 = 2.0;
double r37283 = r37281 / r37282;
double r37284 = 4.0;
double r37285 = a;
double r37286 = c;
double r37287 = r37285 * r37286;
double r37288 = r37284 * r37287;
double r37289 = b;
double r37290 = -r37289;
double r37291 = r37289 * r37289;
double r37292 = r37284 * r37285;
double r37293 = r37292 * r37286;
double r37294 = r37291 - r37293;
double r37295 = sqrt(r37294);
double r37296 = r37290 - r37295;
double r37297 = r37285 * r37296;
double r37298 = r37288 / r37297;
double r37299 = r37283 * r37298;
return r37299;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.9
rmApplied flip-+52.9
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019352
(FPCore (a b c)
:name "Quadratic roots, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))