\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 -2.2375225949334019 \cdot 10^{57}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 8.67970785211126629 \cdot 10^{-40}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r535 = b;
double r536 = -r535;
double r537 = r535 * r535;
double r538 = 4.0;
double r539 = a;
double r540 = r538 * r539;
double r541 = c;
double r542 = r540 * r541;
double r543 = r537 - r542;
double r544 = sqrt(r543);
double r545 = r536 + r544;
double r546 = 2.0;
double r547 = r546 * r539;
double r548 = r545 / r547;
return r548;
}
double f(double a, double b, double c) {
double r549 = b;
double r550 = -2.237522594933402e+57;
bool r551 = r549 <= r550;
double r552 = 1.0;
double r553 = c;
double r554 = r553 / r549;
double r555 = a;
double r556 = r549 / r555;
double r557 = r554 - r556;
double r558 = r552 * r557;
double r559 = 8.679707852111266e-40;
bool r560 = r549 <= r559;
double r561 = -r549;
double r562 = r549 * r549;
double r563 = 4.0;
double r564 = r563 * r555;
double r565 = r564 * r553;
double r566 = r562 - r565;
double r567 = sqrt(r566);
double r568 = r561 + r567;
double r569 = 2.0;
double r570 = r569 * r555;
double r571 = r568 / r570;
double r572 = -1.0;
double r573 = r572 * r554;
double r574 = r560 ? r571 : r573;
double r575 = r551 ? r558 : r574;
return r575;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 10.6 |
if b < -2.237522594933402e+57Initial program 38.1
Taylor expanded around -inf 5.5
Simplified5.5
if -2.237522594933402e+57 < b < 8.679707852111266e-40Initial program 15.3
if 8.679707852111266e-40 < b Initial program 55.1
Taylor expanded around inf 7.5
Final simplification10.6
herbie shell --seed 2020025
(FPCore (a b c)
:name "The quadratic formula (r1)"
:precision binary64
:herbie-target
(if (< b 0.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)))