\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{4 \cdot \left(a \cdot c\right)}{\mathsf{fma}\left(-\sqrt{b}, \sqrt{b}, -\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}{2 \cdot a}double f(double a, double b, double c) {
double r33233 = b;
double r33234 = -r33233;
double r33235 = r33233 * r33233;
double r33236 = 4.0;
double r33237 = a;
double r33238 = r33236 * r33237;
double r33239 = c;
double r33240 = r33238 * r33239;
double r33241 = r33235 - r33240;
double r33242 = sqrt(r33241);
double r33243 = r33234 + r33242;
double r33244 = 2.0;
double r33245 = r33244 * r33237;
double r33246 = r33243 / r33245;
return r33246;
}
double f(double a, double b, double c) {
double r33247 = 4.0;
double r33248 = a;
double r33249 = c;
double r33250 = r33248 * r33249;
double r33251 = r33247 * r33250;
double r33252 = b;
double r33253 = sqrt(r33252);
double r33254 = -r33253;
double r33255 = r33252 * r33252;
double r33256 = r33255 - r33251;
double r33257 = sqrt(r33256);
double r33258 = -r33257;
double r33259 = fma(r33254, r33253, r33258);
double r33260 = r33251 / r33259;
double r33261 = 2.0;
double r33262 = r33261 * r33248;
double r33263 = r33260 / r33262;
return r33263;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 52.7
rmApplied flip-+52.7
Simplified0.4
rmApplied add-sqr-sqrt0.5
Applied distribute-lft-neg-in0.5
Applied fma-neg0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019325 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, wide range"
:precision binary64
:pre (and (< 4.93038e-32 a 2.02824e+31) (< 4.93038e-32 b 2.02824e+31) (< 4.93038e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))