\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.399747870429879 \cdot 10^{-86}:\\
\;\;\;\;\frac{\sqrt{\mathsf{fma}\left(\left(c \cdot -4\right), a, \left(b \cdot b\right)\right)} - b}{a} \cdot \frac{1}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\left(c \cdot -4\right) \cdot a}{\left(b + \sqrt{\mathsf{fma}\left(\left(c \cdot -4\right), a, \left(b \cdot b\right)\right)}\right) \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r21822708 = b;
double r21822709 = -r21822708;
double r21822710 = r21822708 * r21822708;
double r21822711 = 4.0;
double r21822712 = a;
double r21822713 = r21822711 * r21822712;
double r21822714 = c;
double r21822715 = r21822713 * r21822714;
double r21822716 = r21822710 - r21822715;
double r21822717 = sqrt(r21822716);
double r21822718 = r21822709 + r21822717;
double r21822719 = 2.0;
double r21822720 = r21822719 * r21822712;
double r21822721 = r21822718 / r21822720;
return r21822721;
}
double f(double a, double b, double c) {
double r21822722 = b;
double r21822723 = 2.399747870429879e-86;
bool r21822724 = r21822722 <= r21822723;
double r21822725 = c;
double r21822726 = -4.0;
double r21822727 = r21822725 * r21822726;
double r21822728 = a;
double r21822729 = r21822722 * r21822722;
double r21822730 = fma(r21822727, r21822728, r21822729);
double r21822731 = sqrt(r21822730);
double r21822732 = r21822731 - r21822722;
double r21822733 = r21822732 / r21822728;
double r21822734 = 0.5;
double r21822735 = r21822733 * r21822734;
double r21822736 = r21822727 * r21822728;
double r21822737 = r21822722 + r21822731;
double r21822738 = r21822737 * r21822728;
double r21822739 = r21822736 / r21822738;
double r21822740 = r21822734 * r21822739;
double r21822741 = r21822724 ? r21822735 : r21822740;
return r21822741;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 32.9 |
|---|---|
| Target | 20.3 |
| Herbie | 22.1 |
if b < 2.399747870429879e-86Initial program 20.0
Simplified20.0
rmApplied *-un-lft-identity20.0
Applied *-un-lft-identity20.0
Applied *-un-lft-identity20.0
Applied distribute-lft-out--20.0
Applied times-frac20.0
Applied associate-/l*20.1
Simplified20.1
rmApplied associate-/r/20.1
Applied add-sqr-sqrt20.1
Applied times-frac20.1
Simplified19.9
Simplified19.9
if 2.399747870429879e-86 < b Initial program 52.1
Simplified52.2
rmApplied *-un-lft-identity52.2
Applied *-un-lft-identity52.2
Applied *-un-lft-identity52.2
Applied distribute-lft-out--52.2
Applied times-frac52.2
Applied associate-/l*52.2
Simplified52.2
rmApplied associate-/r/52.2
Applied add-sqr-sqrt52.2
Applied times-frac52.2
Simplified52.2
Simplified52.2
rmApplied flip--52.2
Applied associate-/l/53.4
Simplified25.2
Final simplification22.1
herbie shell --seed 2019124 +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)))