\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(2 \cdot a\right) \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r31203 = b;
double r31204 = -r31203;
double r31205 = r31203 * r31203;
double r31206 = 4.0;
double r31207 = a;
double r31208 = r31206 * r31207;
double r31209 = c;
double r31210 = r31208 * r31209;
double r31211 = r31205 - r31210;
double r31212 = sqrt(r31211);
double r31213 = r31204 + r31212;
double r31214 = 2.0;
double r31215 = r31214 * r31207;
double r31216 = r31213 / r31215;
return r31216;
}
double f(double a, double b, double c) {
double r31217 = 0.0;
double r31218 = 4.0;
double r31219 = a;
double r31220 = c;
double r31221 = r31219 * r31220;
double r31222 = r31218 * r31221;
double r31223 = r31217 + r31222;
double r31224 = 2.0;
double r31225 = r31224 * r31219;
double r31226 = b;
double r31227 = -r31226;
double r31228 = r31226 * r31226;
double r31229 = r31218 * r31219;
double r31230 = r31229 * r31220;
double r31231 = r31228 - r31230;
double r31232 = sqrt(r31231);
double r31233 = r31227 - r31232;
double r31234 = r31225 * r31233;
double r31235 = r31223 / r31234;
return r31235;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.7
rmApplied flip-+28.7
Simplified0.5
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019347
(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)))