\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{\mathsf{fma}\left(b, b, -\left(4 \cdot a\right) \cdot c\right)}\right)}double f(double a, double b, double c) {
double r38285 = b;
double r38286 = -r38285;
double r38287 = r38285 * r38285;
double r38288 = 4.0;
double r38289 = a;
double r38290 = r38288 * r38289;
double r38291 = c;
double r38292 = r38290 * r38291;
double r38293 = r38287 - r38292;
double r38294 = sqrt(r38293);
double r38295 = r38286 + r38294;
double r38296 = 2.0;
double r38297 = r38296 * r38289;
double r38298 = r38295 / r38297;
return r38298;
}
double f(double a, double b, double c) {
double r38299 = 1.0;
double r38300 = 2.0;
double r38301 = r38299 / r38300;
double r38302 = 4.0;
double r38303 = a;
double r38304 = c;
double r38305 = r38303 * r38304;
double r38306 = r38302 * r38305;
double r38307 = r38306 / r38303;
double r38308 = b;
double r38309 = r38302 * r38303;
double r38310 = r38309 * r38304;
double r38311 = -r38310;
double r38312 = fma(r38308, r38308, r38311);
double r38313 = sqrt(r38312);
double r38314 = r38308 + r38313;
double r38315 = -r38314;
double r38316 = r38307 / r38315;
double r38317 = r38301 * r38316;
return r38317;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 28.3
rmApplied flip-+28.4
Simplified0.5
rmApplied add-cbrt-cube0.5
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Simplified0.4
rmApplied fma-neg0.3
Final simplification0.3
herbie shell --seed 2020025 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:precision binary64
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))