\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -5.3248915655872564 \cdot 10^{+79}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 4.2796532586596585 \cdot 10^{-91}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(4 \cdot a\right)}\right) \cdot \frac{\frac{1}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r4127239 = b;
double r4127240 = -r4127239;
double r4127241 = r4127239 * r4127239;
double r4127242 = 4.0;
double r4127243 = a;
double r4127244 = r4127242 * r4127243;
double r4127245 = c;
double r4127246 = r4127244 * r4127245;
double r4127247 = r4127241 - r4127246;
double r4127248 = sqrt(r4127247);
double r4127249 = r4127240 + r4127248;
double r4127250 = 2.0;
double r4127251 = r4127250 * r4127243;
double r4127252 = r4127249 / r4127251;
return r4127252;
}
double f(double a, double b, double c) {
double r4127253 = b;
double r4127254 = -5.3248915655872564e+79;
bool r4127255 = r4127253 <= r4127254;
double r4127256 = c;
double r4127257 = r4127256 / r4127253;
double r4127258 = a;
double r4127259 = r4127253 / r4127258;
double r4127260 = r4127257 - r4127259;
double r4127261 = 4.2796532586596585e-91;
bool r4127262 = r4127253 <= r4127261;
double r4127263 = -r4127253;
double r4127264 = r4127253 * r4127253;
double r4127265 = 4.0;
double r4127266 = r4127265 * r4127258;
double r4127267 = r4127256 * r4127266;
double r4127268 = r4127264 - r4127267;
double r4127269 = sqrt(r4127268);
double r4127270 = r4127263 + r4127269;
double r4127271 = 0.5;
double r4127272 = r4127271 / r4127258;
double r4127273 = r4127270 * r4127272;
double r4127274 = -r4127257;
double r4127275 = r4127262 ? r4127273 : r4127274;
double r4127276 = r4127255 ? r4127260 : r4127275;
return r4127276;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.7 |
|---|---|
| Target | 20.5 |
| Herbie | 10.2 |
if b < -5.3248915655872564e+79Initial program 41.1
Taylor expanded around -inf 4.6
if -5.3248915655872564e+79 < b < 4.2796532586596585e-91Initial program 13.0
rmApplied div-inv13.1
Simplified13.1
if 4.2796532586596585e-91 < b Initial program 52.0
rmApplied div-inv52.0
Simplified52.0
Taylor expanded around inf 9.6
Simplified9.6
Final simplification10.2
herbie shell --seed 2019135 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))