\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -4.127986421304602107023968829046578659366 \cdot 10^{128} \lor \neg \left(z \le 1.778030437179678559841700639570196585266 \cdot 10^{125}\right):\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \left(y \cdot z - x\right) \cdot \frac{1}{t \cdot z - x}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r564611 = x;
double r564612 = y;
double r564613 = z;
double r564614 = r564612 * r564613;
double r564615 = r564614 - r564611;
double r564616 = t;
double r564617 = r564616 * r564613;
double r564618 = r564617 - r564611;
double r564619 = r564615 / r564618;
double r564620 = r564611 + r564619;
double r564621 = 1.0;
double r564622 = r564611 + r564621;
double r564623 = r564620 / r564622;
return r564623;
}
double f(double x, double y, double z, double t) {
double r564624 = z;
double r564625 = -4.127986421304602e+128;
bool r564626 = r564624 <= r564625;
double r564627 = 1.7780304371796786e+125;
bool r564628 = r564624 <= r564627;
double r564629 = !r564628;
bool r564630 = r564626 || r564629;
double r564631 = x;
double r564632 = y;
double r564633 = t;
double r564634 = r564632 / r564633;
double r564635 = r564631 + r564634;
double r564636 = 1.0;
double r564637 = r564631 + r564636;
double r564638 = r564635 / r564637;
double r564639 = r564632 * r564624;
double r564640 = r564639 - r564631;
double r564641 = 1.0;
double r564642 = r564633 * r564624;
double r564643 = r564642 - r564631;
double r564644 = r564641 / r564643;
double r564645 = r564640 * r564644;
double r564646 = r564631 + r564645;
double r564647 = r564646 / r564637;
double r564648 = r564630 ? r564638 : r564647;
return r564648;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.0 |
|---|---|
| Target | 0.3 |
| Herbie | 3.1 |
if z < -4.127986421304602e+128 or 1.7780304371796786e+125 < z Initial program 20.5
Taylor expanded around inf 6.6
if -4.127986421304602e+128 < z < 1.7780304371796786e+125Initial program 1.7
rmApplied div-inv1.7
Final simplification3.1
herbie shell --seed 2019305
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))