\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 -6.376253530740768 \cdot 10^{+152}:\\
\;\;\;\;\frac{\left(a \cdot \frac{c}{b} - b\right) \cdot 2}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.2059736638617364 \cdot 10^{-150}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{a}\\
\mathbf{elif}\;b \le 8.834167001137509 \cdot 10^{-10}:\\
\;\;\;\;\frac{4 \cdot \left(a \cdot c\right)}{\frac{a}{\frac{1}{2}}} \cdot \frac{-1}{b + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-c}{b}\\
\end{array}double f(double a, double b, double c) {
double r4979594 = b;
double r4979595 = -r4979594;
double r4979596 = r4979594 * r4979594;
double r4979597 = 4.0;
double r4979598 = a;
double r4979599 = r4979597 * r4979598;
double r4979600 = c;
double r4979601 = r4979599 * r4979600;
double r4979602 = r4979596 - r4979601;
double r4979603 = sqrt(r4979602);
double r4979604 = r4979595 + r4979603;
double r4979605 = 2.0;
double r4979606 = r4979605 * r4979598;
double r4979607 = r4979604 / r4979606;
return r4979607;
}
double f(double a, double b, double c) {
double r4979608 = b;
double r4979609 = -6.376253530740768e+152;
bool r4979610 = r4979608 <= r4979609;
double r4979611 = a;
double r4979612 = c;
double r4979613 = r4979612 / r4979608;
double r4979614 = r4979611 * r4979613;
double r4979615 = r4979614 - r4979608;
double r4979616 = 2.0;
double r4979617 = r4979615 * r4979616;
double r4979618 = r4979616 * r4979611;
double r4979619 = r4979617 / r4979618;
double r4979620 = 3.2059736638617364e-150;
bool r4979621 = r4979608 <= r4979620;
double r4979622 = 0.5;
double r4979623 = r4979608 * r4979608;
double r4979624 = 4.0;
double r4979625 = r4979611 * r4979612;
double r4979626 = r4979624 * r4979625;
double r4979627 = r4979623 - r4979626;
double r4979628 = sqrt(r4979627);
double r4979629 = r4979628 - r4979608;
double r4979630 = r4979629 / r4979611;
double r4979631 = r4979622 * r4979630;
double r4979632 = 8.834167001137509e-10;
bool r4979633 = r4979608 <= r4979632;
double r4979634 = r4979611 / r4979622;
double r4979635 = r4979626 / r4979634;
double r4979636 = -1.0;
double r4979637 = r4979608 + r4979628;
double r4979638 = r4979636 / r4979637;
double r4979639 = r4979635 * r4979638;
double r4979640 = -r4979612;
double r4979641 = r4979640 / r4979608;
double r4979642 = r4979633 ? r4979639 : r4979641;
double r4979643 = r4979621 ? r4979631 : r4979642;
double r4979644 = r4979610 ? r4979619 : r4979643;
return r4979644;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.5 |
|---|---|
| Target | 20.4 |
| Herbie | 8.7 |
if b < -6.376253530740768e+152Initial program 60.5
Simplified60.5
Taylor expanded around -inf 12.3
Simplified2.0
if -6.376253530740768e+152 < b < 3.2059736638617364e-150Initial program 10.4
Simplified10.4
rmApplied *-un-lft-identity10.4
Applied associate-/l*10.6
rmApplied *-un-lft-identity10.6
Applied *-un-lft-identity10.6
Applied distribute-lft-out--10.6
Applied times-frac10.6
Applied add-sqr-sqrt10.6
Applied times-frac10.6
Simplified10.6
Simplified10.4
if 3.2059736638617364e-150 < b < 8.834167001137509e-10Initial program 32.0
Simplified32.0
rmApplied *-un-lft-identity32.0
Applied associate-/l*32.1
rmApplied flip--32.2
Applied associate-/r/32.2
Applied *-un-lft-identity32.2
Applied times-frac32.3
Simplified16.5
if 8.834167001137509e-10 < b Initial program 54.0
Simplified54.0
Taylor expanded around inf 6.2
Simplified6.2
Final simplification8.7
herbie shell --seed 2019104
(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)))