\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.6737765706499252 \cdot 10^{47}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 9.39036747108992214 \cdot 10^{-69}:\\
\;\;\;\;\frac{1}{2} \cdot \left(\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{a}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \frac{c}{b}\right)\\
\end{array}double f(double a, double b, double c) {
double r141592 = b;
double r141593 = -r141592;
double r141594 = r141592 * r141592;
double r141595 = 4.0;
double r141596 = a;
double r141597 = r141595 * r141596;
double r141598 = c;
double r141599 = r141597 * r141598;
double r141600 = r141594 - r141599;
double r141601 = sqrt(r141600);
double r141602 = r141593 + r141601;
double r141603 = 2.0;
double r141604 = r141603 * r141596;
double r141605 = r141602 / r141604;
return r141605;
}
double f(double a, double b, double c) {
double r141606 = b;
double r141607 = -2.6737765706499252e+47;
bool r141608 = r141606 <= r141607;
double r141609 = 1.0;
double r141610 = c;
double r141611 = r141610 / r141606;
double r141612 = a;
double r141613 = r141606 / r141612;
double r141614 = r141611 - r141613;
double r141615 = r141609 * r141614;
double r141616 = 9.390367471089922e-69;
bool r141617 = r141606 <= r141616;
double r141618 = 1.0;
double r141619 = 2.0;
double r141620 = r141618 / r141619;
double r141621 = -r141606;
double r141622 = r141606 * r141606;
double r141623 = 4.0;
double r141624 = r141623 * r141612;
double r141625 = r141624 * r141610;
double r141626 = r141622 - r141625;
double r141627 = sqrt(r141626);
double r141628 = r141621 + r141627;
double r141629 = r141618 / r141612;
double r141630 = r141628 * r141629;
double r141631 = r141620 * r141630;
double r141632 = -2.0;
double r141633 = r141632 * r141611;
double r141634 = r141620 * r141633;
double r141635 = r141617 ? r141631 : r141634;
double r141636 = r141608 ? r141615 : r141635;
return r141636;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.6 |
|---|---|
| Target | 21.2 |
| Herbie | 10.2 |
if b < -2.6737765706499252e+47Initial program 37.5
Taylor expanded around -inf 5.3
Simplified5.3
if -2.6737765706499252e+47 < b < 9.390367471089922e-69Initial program 14.0
rmApplied *-un-lft-identity14.0
Applied times-frac14.0
rmApplied div-inv14.1
if 9.390367471089922e-69 < b Initial program 53.5
rmApplied *-un-lft-identity53.5
Applied times-frac53.5
rmApplied div-inv53.5
Taylor expanded around inf 8.7
Final simplification10.2
herbie shell --seed 2020018 +o rules:numerics
(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)))