\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le 2.9636654838140303 \cdot 10^{-242}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - b}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -4, 0\right)}{a}}{b + \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}}{2}\\
\end{array}double f(double a, double b, double c) {
double r2556925 = b;
double r2556926 = -r2556925;
double r2556927 = r2556925 * r2556925;
double r2556928 = 4.0;
double r2556929 = a;
double r2556930 = c;
double r2556931 = r2556929 * r2556930;
double r2556932 = r2556928 * r2556931;
double r2556933 = r2556927 - r2556932;
double r2556934 = sqrt(r2556933);
double r2556935 = r2556926 + r2556934;
double r2556936 = 2.0;
double r2556937 = r2556936 * r2556929;
double r2556938 = r2556935 / r2556937;
return r2556938;
}
double f(double a, double b, double c) {
double r2556939 = b;
double r2556940 = 2.9636654838140303e-242;
bool r2556941 = r2556939 <= r2556940;
double r2556942 = a;
double r2556943 = c;
double r2556944 = r2556942 * r2556943;
double r2556945 = -4.0;
double r2556946 = r2556939 * r2556939;
double r2556947 = fma(r2556944, r2556945, r2556946);
double r2556948 = sqrt(r2556947);
double r2556949 = r2556948 - r2556939;
double r2556950 = r2556949 / r2556942;
double r2556951 = 2.0;
double r2556952 = r2556950 / r2556951;
double r2556953 = 0.0;
double r2556954 = fma(r2556944, r2556945, r2556953);
double r2556955 = r2556954 / r2556942;
double r2556956 = r2556939 + r2556948;
double r2556957 = r2556955 / r2556956;
double r2556958 = r2556957 / r2556951;
double r2556959 = r2556941 ? r2556952 : r2556958;
return r2556959;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.3 |
|---|---|
| Target | 20.7 |
| Herbie | 21.7 |
if b < 2.9636654838140303e-242Initial program 20.8
Simplified20.8
if 2.9636654838140303e-242 < b Initial program 45.5
Simplified45.5
rmApplied *-un-lft-identity45.5
Applied *-un-lft-identity45.5
Applied distribute-lft-out--45.5
Applied associate-/l*45.5
rmApplied flip--45.6
Applied associate-/r/45.6
Applied associate-/r*45.6
Simplified22.6
Final simplification21.7
herbie shell --seed 2019142 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
: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)))