\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{\frac{4 \cdot \left(a \cdot c\right)}{2}}{a}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r32227 = b;
double r32228 = -r32227;
double r32229 = r32227 * r32227;
double r32230 = 4.0;
double r32231 = a;
double r32232 = r32230 * r32231;
double r32233 = c;
double r32234 = r32232 * r32233;
double r32235 = r32229 - r32234;
double r32236 = sqrt(r32235);
double r32237 = r32228 + r32236;
double r32238 = 2.0;
double r32239 = r32238 * r32231;
double r32240 = r32237 / r32239;
return r32240;
}
double f(double a, double b, double c) {
double r32241 = 4.0;
double r32242 = a;
double r32243 = c;
double r32244 = r32242 * r32243;
double r32245 = r32241 * r32244;
double r32246 = 2.0;
double r32247 = r32245 / r32246;
double r32248 = r32247 / r32242;
double r32249 = b;
double r32250 = -r32249;
double r32251 = r32249 * r32249;
double r32252 = r32241 * r32242;
double r32253 = r32252 * r32243;
double r32254 = r32251 - r32253;
double r32255 = sqrt(r32254);
double r32256 = r32250 - r32255;
double r32257 = r32248 / r32256;
return r32257;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.8
rmApplied flip-+52.8
Simplified0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied associate-/r*0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020089 +o rules:numerics
(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)))