\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 -227369802444031.66:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\mathbf{elif}\;b \le 2.0617732603635578 \cdot 10^{-61}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r2252416 = b;
double r2252417 = -r2252416;
double r2252418 = r2252416 * r2252416;
double r2252419 = 4.0;
double r2252420 = a;
double r2252421 = r2252419 * r2252420;
double r2252422 = c;
double r2252423 = r2252421 * r2252422;
double r2252424 = r2252418 - r2252423;
double r2252425 = sqrt(r2252424);
double r2252426 = r2252417 + r2252425;
double r2252427 = 2.0;
double r2252428 = r2252427 * r2252420;
double r2252429 = r2252426 / r2252428;
return r2252429;
}
double f(double a, double b, double c) {
double r2252430 = b;
double r2252431 = -227369802444031.66;
bool r2252432 = r2252430 <= r2252431;
double r2252433 = c;
double r2252434 = r2252433 / r2252430;
double r2252435 = a;
double r2252436 = r2252430 / r2252435;
double r2252437 = r2252434 - r2252436;
double r2252438 = 2.0;
double r2252439 = r2252437 * r2252438;
double r2252440 = r2252439 / r2252438;
double r2252441 = 2.0617732603635578e-61;
bool r2252442 = r2252430 <= r2252441;
double r2252443 = -4.0;
double r2252444 = r2252443 * r2252433;
double r2252445 = r2252430 * r2252430;
double r2252446 = fma(r2252435, r2252444, r2252445);
double r2252447 = sqrt(r2252446);
double r2252448 = r2252447 - r2252430;
double r2252449 = r2252448 / r2252435;
double r2252450 = r2252449 / r2252438;
double r2252451 = -2.0;
double r2252452 = r2252451 * r2252434;
double r2252453 = r2252452 / r2252438;
double r2252454 = r2252442 ? r2252450 : r2252453;
double r2252455 = r2252432 ? r2252440 : r2252454;
return r2252455;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.5 |
|---|---|
| Target | 20.6 |
| Herbie | 10.5 |
if b < -227369802444031.66Initial program 32.9
Simplified32.9
Taylor expanded around 0 32.9
Taylor expanded around -inf 6.8
Simplified6.8
if -227369802444031.66 < b < 2.0617732603635578e-61Initial program 14.9
Simplified14.9
Taylor expanded around 0 15.0
rmApplied clear-num15.0
rmApplied *-un-lft-identity15.0
Applied *-un-lft-identity15.0
Applied times-frac15.0
Applied add-cube-cbrt15.0
Applied times-frac15.0
Simplified15.0
Simplified15.0
if 2.0617732603635578e-61 < b Initial program 52.8
Simplified52.8
Taylor expanded around 0 52.8
Taylor expanded around inf 8.3
Final simplification10.5
herbie shell --seed 2019146 +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)))