\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -8.114676354067779218146434366254066316571 \cdot 10^{166} \lor \neg \left(z \le 6.158470310373082749921667144051634464626 \cdot 10^{144}\right):\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r592056 = x;
double r592057 = y;
double r592058 = z;
double r592059 = r592057 * r592058;
double r592060 = r592059 - r592056;
double r592061 = t;
double r592062 = r592061 * r592058;
double r592063 = r592062 - r592056;
double r592064 = r592060 / r592063;
double r592065 = r592056 + r592064;
double r592066 = 1.0;
double r592067 = r592056 + r592066;
double r592068 = r592065 / r592067;
return r592068;
}
double f(double x, double y, double z, double t) {
double r592069 = z;
double r592070 = -8.114676354067779e+166;
bool r592071 = r592069 <= r592070;
double r592072 = 6.158470310373083e+144;
bool r592073 = r592069 <= r592072;
double r592074 = !r592073;
bool r592075 = r592071 || r592074;
double r592076 = x;
double r592077 = y;
double r592078 = t;
double r592079 = r592077 / r592078;
double r592080 = r592076 + r592079;
double r592081 = 1.0;
double r592082 = r592076 + r592081;
double r592083 = r592080 / r592082;
double r592084 = r592077 * r592069;
double r592085 = r592084 - r592076;
double r592086 = r592078 * r592069;
double r592087 = r592086 - r592076;
double r592088 = r592085 / r592087;
double r592089 = r592076 + r592088;
double r592090 = r592089 / r592082;
double r592091 = r592075 ? r592083 : r592090;
return r592091;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.1 |
|---|---|
| Target | 0.2 |
| Herbie | 3.5 |
if z < -8.114676354067779e+166 or 6.158470310373083e+144 < z Initial program 21.5
Taylor expanded around inf 6.9
if -8.114676354067779e+166 < z < 6.158470310373083e+144Initial program 2.4
Final simplification3.5
herbie shell --seed 2019212
(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)))