\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(2 \cdot a\right) \cdot \left(-b\right) + \left(2 \cdot a\right) \cdot \left(-\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r46230 = b;
double r46231 = -r46230;
double r46232 = r46230 * r46230;
double r46233 = 4.0;
double r46234 = a;
double r46235 = r46233 * r46234;
double r46236 = c;
double r46237 = r46235 * r46236;
double r46238 = r46232 - r46237;
double r46239 = sqrt(r46238);
double r46240 = r46231 + r46239;
double r46241 = 2.0;
double r46242 = r46241 * r46234;
double r46243 = r46240 / r46242;
return r46243;
}
double f(double a, double b, double c) {
double r46244 = 0.0;
double r46245 = 4.0;
double r46246 = a;
double r46247 = c;
double r46248 = r46246 * r46247;
double r46249 = r46245 * r46248;
double r46250 = r46244 + r46249;
double r46251 = 2.0;
double r46252 = r46251 * r46246;
double r46253 = b;
double r46254 = -r46253;
double r46255 = r46252 * r46254;
double r46256 = r46253 * r46253;
double r46257 = r46245 * r46246;
double r46258 = r46257 * r46247;
double r46259 = r46256 - r46258;
double r46260 = sqrt(r46259);
double r46261 = -r46260;
double r46262 = r46252 * r46261;
double r46263 = r46255 + r46262;
double r46264 = r46250 / r46263;
return r46264;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.7
rmApplied flip-+43.7
Simplified0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied sub-neg0.4
Applied distribute-lft-in0.4
Final simplification0.4
herbie shell --seed 2020062 +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)))