\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{-\left(\frac{2}{4} \cdot \frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{c} + \frac{2}{4} \cdot \frac{b}{c}\right)}double f(double a, double b, double c) {
double r30284 = b;
double r30285 = -r30284;
double r30286 = r30284 * r30284;
double r30287 = 4.0;
double r30288 = a;
double r30289 = r30287 * r30288;
double r30290 = c;
double r30291 = r30289 * r30290;
double r30292 = r30286 - r30291;
double r30293 = sqrt(r30292);
double r30294 = r30285 + r30293;
double r30295 = 2.0;
double r30296 = r30295 * r30288;
double r30297 = r30294 / r30296;
return r30297;
}
double f(double a, double b, double c) {
double r30298 = 1.0;
double r30299 = 2.0;
double r30300 = 4.0;
double r30301 = r30299 / r30300;
double r30302 = b;
double r30303 = r30302 * r30302;
double r30304 = a;
double r30305 = r30300 * r30304;
double r30306 = c;
double r30307 = r30305 * r30306;
double r30308 = r30303 - r30307;
double r30309 = sqrt(r30308);
double r30310 = r30309 / r30306;
double r30311 = r30301 * r30310;
double r30312 = r30302 / r30306;
double r30313 = r30301 * r30312;
double r30314 = r30311 + r30313;
double r30315 = -r30314;
double r30316 = r30298 / r30315;
return r30316;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.5
rmApplied flip-+52.4
Simplified0.4
rmApplied clear-num0.4
Simplified0.4
rmApplied sub-neg0.4
Applied distribute-lft-in0.4
Simplified0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2019235 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, wide range"
:precision binary64
:pre (and (< 4.93038e-32 a 2.02824e31) (< 4.93038e-32 b 2.02824e31) (< 4.93038e-32 c 2.02824e31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))