\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -3.832743991663159011901320277588321287743 \cdot 10^{163} \lor \neg \left(z \le 2.591866107892754560678508093750567912678 \cdot 10^{61}\right):\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{1}{\frac{t \cdot z}{y \cdot z - x} - \frac{x}{y \cdot z - x}}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r420057 = x;
double r420058 = y;
double r420059 = z;
double r420060 = r420058 * r420059;
double r420061 = r420060 - r420057;
double r420062 = t;
double r420063 = r420062 * r420059;
double r420064 = r420063 - r420057;
double r420065 = r420061 / r420064;
double r420066 = r420057 + r420065;
double r420067 = 1.0;
double r420068 = r420057 + r420067;
double r420069 = r420066 / r420068;
return r420069;
}
double f(double x, double y, double z, double t) {
double r420070 = z;
double r420071 = -3.832743991663159e+163;
bool r420072 = r420070 <= r420071;
double r420073 = 2.5918661078927546e+61;
bool r420074 = r420070 <= r420073;
double r420075 = !r420074;
bool r420076 = r420072 || r420075;
double r420077 = x;
double r420078 = y;
double r420079 = t;
double r420080 = r420078 / r420079;
double r420081 = r420077 + r420080;
double r420082 = 1.0;
double r420083 = r420077 + r420082;
double r420084 = r420081 / r420083;
double r420085 = 1.0;
double r420086 = r420079 * r420070;
double r420087 = r420078 * r420070;
double r420088 = r420087 - r420077;
double r420089 = r420086 / r420088;
double r420090 = r420077 / r420088;
double r420091 = r420089 - r420090;
double r420092 = r420085 / r420091;
double r420093 = r420077 + r420092;
double r420094 = r420093 / r420083;
double r420095 = r420076 ? r420084 : r420094;
return r420095;
}




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.4 |
if z < -3.832743991663159e+163 or 2.5918661078927546e+61 < z Initial program 18.9
Taylor expanded around inf 7.5
if -3.832743991663159e+163 < z < 2.5918661078927546e+61Initial program 1.6
rmApplied clear-num1.6
rmApplied div-sub1.6
Final simplification3.4
herbie shell --seed 2019294
(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)))