\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)}\begin{array}{l}
\mathbf{if}\;\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} = -\infty:\\
\;\;\;\;x\\
\mathbf{elif}\;\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} \le -1.0453105058496541 \cdot 10^{-301}:\\
\;\;\;\;\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)}\\
\mathbf{elif}\;\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} \le 0.0 \lor \neg \left(\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} \le 1.9961735121647787 \cdot 10^{271}\right):\\
\;\;\;\;\frac{t}{b} - \frac{a}{b}\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot y + z \cdot \left(t - a\right)\right) \cdot \frac{1}{y + z \cdot \left(b - y\right)}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r489773 = x;
double r489774 = y;
double r489775 = r489773 * r489774;
double r489776 = z;
double r489777 = t;
double r489778 = a;
double r489779 = r489777 - r489778;
double r489780 = r489776 * r489779;
double r489781 = r489775 + r489780;
double r489782 = b;
double r489783 = r489782 - r489774;
double r489784 = r489776 * r489783;
double r489785 = r489774 + r489784;
double r489786 = r489781 / r489785;
return r489786;
}
double f(double x, double y, double z, double t, double a, double b) {
double r489787 = x;
double r489788 = y;
double r489789 = r489787 * r489788;
double r489790 = z;
double r489791 = t;
double r489792 = a;
double r489793 = r489791 - r489792;
double r489794 = r489790 * r489793;
double r489795 = r489789 + r489794;
double r489796 = b;
double r489797 = r489796 - r489788;
double r489798 = r489790 * r489797;
double r489799 = r489788 + r489798;
double r489800 = r489795 / r489799;
double r489801 = -inf.0;
bool r489802 = r489800 <= r489801;
double r489803 = -1.045310505849654e-301;
bool r489804 = r489800 <= r489803;
double r489805 = 0.0;
bool r489806 = r489800 <= r489805;
double r489807 = 1.9961735121647787e+271;
bool r489808 = r489800 <= r489807;
double r489809 = !r489808;
bool r489810 = r489806 || r489809;
double r489811 = r489791 / r489796;
double r489812 = r489792 / r489796;
double r489813 = r489811 - r489812;
double r489814 = 1.0;
double r489815 = r489814 / r489799;
double r489816 = r489795 * r489815;
double r489817 = r489810 ? r489813 : r489816;
double r489818 = r489804 ? r489800 : r489817;
double r489819 = r489802 ? r489787 : r489818;
return r489819;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 23.8 |
|---|---|
| Target | 18.2 |
| Herbie | 15.7 |
if (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))) < -inf.0Initial program 64.0
rmApplied clear-num64.0
rmApplied div-inv64.0
Applied associate-/r*64.0
Simplified64.0
Taylor expanded around 0 37.3
if -inf.0 < (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))) < -1.045310505849654e-301Initial program 0.3
if -1.045310505849654e-301 < (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))) < 0.0 or 1.9961735121647787e+271 < (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))) Initial program 56.8
rmApplied clear-num56.8
rmApplied div-inv56.8
Applied associate-/r*56.8
Simplified56.8
Taylor expanded around inf 38.3
if 0.0 < (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))) < 1.9961735121647787e+271Initial program 0.3
rmApplied div-inv0.4
Final simplification15.7
herbie shell --seed 2020042
(FPCore (x y z t a b)
:name "Development.Shake.Progress:decay from shake-0.15.5"
:precision binary64
:herbie-target
(- (/ (+ (* z t) (* y x)) (+ y (* z (- b y)))) (/ a (+ (- b y) (/ y z))))
(/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))))