\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{\frac{4 \cdot \left(a \cdot c\right)}{a}}{-\left(b + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r59009 = b;
double r59010 = -r59009;
double r59011 = r59009 * r59009;
double r59012 = 4.0;
double r59013 = a;
double r59014 = r59012 * r59013;
double r59015 = c;
double r59016 = r59014 * r59015;
double r59017 = r59011 - r59016;
double r59018 = sqrt(r59017);
double r59019 = r59010 + r59018;
double r59020 = 2.0;
double r59021 = r59020 * r59013;
double r59022 = r59019 / r59021;
return r59022;
}
double f(double a, double b, double c) {
double r59023 = 1.0;
double r59024 = 2.0;
double r59025 = r59023 / r59024;
double r59026 = 4.0;
double r59027 = a;
double r59028 = c;
double r59029 = r59027 * r59028;
double r59030 = r59026 * r59029;
double r59031 = r59030 / r59027;
double r59032 = b;
double r59033 = r59032 * r59032;
double r59034 = r59026 * r59027;
double r59035 = r59034 * r59028;
double r59036 = r59033 - r59035;
double r59037 = sqrt(r59036);
double r59038 = r59032 + r59037;
double r59039 = -r59038;
double r59040 = r59031 / r59039;
double r59041 = r59025 * r59040;
return r59041;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.7
rmApplied flip-+43.6
Simplified0.4
rmApplied add-sqr-sqrt0.5
Applied distribute-rgt-neg-in0.5
Applied fma-neg0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.2
Final simplification0.2
herbie shell --seed 2019344 +o rules:numerics
(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)))