\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)}\begin{array}{l}
\mathbf{if}\;z \le -3.46309436887537 \cdot 10^{+119}:\\
\;\;\;\;\frac{t}{b} - \frac{a}{b}\\
\mathbf{elif}\;z \le 1.8428426605187136 \cdot 10^{+116}:\\
\;\;\;\;\frac{\mathsf{fma}\left(t - a, z, x \cdot y\right)}{\mathsf{fma}\left(b - y, z, y\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{t}{b} - \frac{a}{b}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r31692558 = x;
double r31692559 = y;
double r31692560 = r31692558 * r31692559;
double r31692561 = z;
double r31692562 = t;
double r31692563 = a;
double r31692564 = r31692562 - r31692563;
double r31692565 = r31692561 * r31692564;
double r31692566 = r31692560 + r31692565;
double r31692567 = b;
double r31692568 = r31692567 - r31692559;
double r31692569 = r31692561 * r31692568;
double r31692570 = r31692559 + r31692569;
double r31692571 = r31692566 / r31692570;
return r31692571;
}
double f(double x, double y, double z, double t, double a, double b) {
double r31692572 = z;
double r31692573 = -3.46309436887537e+119;
bool r31692574 = r31692572 <= r31692573;
double r31692575 = t;
double r31692576 = b;
double r31692577 = r31692575 / r31692576;
double r31692578 = a;
double r31692579 = r31692578 / r31692576;
double r31692580 = r31692577 - r31692579;
double r31692581 = 1.8428426605187136e+116;
bool r31692582 = r31692572 <= r31692581;
double r31692583 = r31692575 - r31692578;
double r31692584 = x;
double r31692585 = y;
double r31692586 = r31692584 * r31692585;
double r31692587 = fma(r31692583, r31692572, r31692586);
double r31692588 = r31692576 - r31692585;
double r31692589 = fma(r31692588, r31692572, r31692585);
double r31692590 = r31692587 / r31692589;
double r31692591 = r31692582 ? r31692590 : r31692580;
double r31692592 = r31692574 ? r31692580 : r31692591;
return r31692592;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 21.8 |
|---|---|
| Target | 16.9 |
| Herbie | 18.5 |
if z < -3.46309436887537e+119 or 1.8428426605187136e+116 < z Initial program 45.1
Simplified45.1
rmApplied div-inv45.1
rmApplied associate-*r/45.1
Simplified45.1
rmApplied clear-num45.1
Taylor expanded around inf 33.8
if -3.46309436887537e+119 < z < 1.8428426605187136e+116Initial program 12.3
Simplified12.3
rmApplied div-inv12.3
rmApplied associate-*r/12.3
Simplified12.3
Final simplification18.5
herbie shell --seed 2019158 +o rules:numerics
(FPCore (x y z t a b)
:name "Development.Shake.Progress:decay from shake-0.15.5"
:herbie-target
(- (/ (+ (* z t) (* y x)) (+ y (* z (- b y)))) (/ a (+ (- b y) (/ y z))))
(/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))))