\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r37046 = b;
double r37047 = -r37046;
double r37048 = r37046 * r37046;
double r37049 = 4.0;
double r37050 = a;
double r37051 = r37049 * r37050;
double r37052 = c;
double r37053 = r37051 * r37052;
double r37054 = r37048 - r37053;
double r37055 = sqrt(r37054);
double r37056 = r37047 + r37055;
double r37057 = 2.0;
double r37058 = r37057 * r37050;
double r37059 = r37056 / r37058;
return r37059;
}
double f(double a, double b, double c) {
double r37060 = 2.0;
double r37061 = c;
double r37062 = r37060 * r37061;
double r37063 = b;
double r37064 = -r37063;
double r37065 = r37063 * r37063;
double r37066 = 4.0;
double r37067 = a;
double r37068 = r37066 * r37067;
double r37069 = r37068 * r37061;
double r37070 = r37065 - r37069;
double r37071 = sqrt(r37070);
double r37072 = r37064 - r37071;
double r37073 = r37062 / r37072;
return r37073;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.4
rmApplied flip-+43.4
Simplified0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied associate-/r*0.2
Simplified0.2
Taylor expanded around 0 0.2
Final simplification0.2
herbie shell --seed 2020020 +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)))