\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{1}{\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{4}}}{2} \cdot \frac{a \cdot c}{a}double f(double a, double b, double c) {
double r36167 = b;
double r36168 = -r36167;
double r36169 = r36167 * r36167;
double r36170 = 4.0;
double r36171 = a;
double r36172 = r36170 * r36171;
double r36173 = c;
double r36174 = r36172 * r36173;
double r36175 = r36169 - r36174;
double r36176 = sqrt(r36175);
double r36177 = r36168 + r36176;
double r36178 = 2.0;
double r36179 = r36178 * r36171;
double r36180 = r36177 / r36179;
return r36180;
}
double f(double a, double b, double c) {
double r36181 = 1.0;
double r36182 = b;
double r36183 = -r36182;
double r36184 = r36182 * r36182;
double r36185 = 4.0;
double r36186 = a;
double r36187 = r36185 * r36186;
double r36188 = c;
double r36189 = r36187 * r36188;
double r36190 = r36184 - r36189;
double r36191 = sqrt(r36190);
double r36192 = r36183 - r36191;
double r36193 = r36192 / r36185;
double r36194 = r36181 / r36193;
double r36195 = 2.0;
double r36196 = r36194 / r36195;
double r36197 = r36186 * r36188;
double r36198 = r36197 / r36186;
double r36199 = r36196 * r36198;
return r36199;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.7
rmApplied flip-+28.7
Simplified0.5
rmApplied clear-num0.5
Simplified0.5
rmApplied div-inv0.5
Applied add-sqr-sqrt0.5
Applied times-frac0.6
Applied times-frac0.5
Simplified0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2019353
(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)))