\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -1.2646983877022145 \cdot 10^{132} \lor \neg \left(z \le 3.75596125063527625 \cdot 10^{86}\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 r669018 = x;
double r669019 = y;
double r669020 = z;
double r669021 = r669019 * r669020;
double r669022 = r669021 - r669018;
double r669023 = t;
double r669024 = r669023 * r669020;
double r669025 = r669024 - r669018;
double r669026 = r669022 / r669025;
double r669027 = r669018 + r669026;
double r669028 = 1.0;
double r669029 = r669018 + r669028;
double r669030 = r669027 / r669029;
return r669030;
}
double f(double x, double y, double z, double t) {
double r669031 = z;
double r669032 = -1.2646983877022145e+132;
bool r669033 = r669031 <= r669032;
double r669034 = 3.755961250635276e+86;
bool r669035 = r669031 <= r669034;
double r669036 = !r669035;
bool r669037 = r669033 || r669036;
double r669038 = x;
double r669039 = y;
double r669040 = t;
double r669041 = r669039 / r669040;
double r669042 = r669038 + r669041;
double r669043 = 1.0;
double r669044 = r669038 + r669043;
double r669045 = r669042 / r669044;
double r669046 = r669039 * r669031;
double r669047 = r669046 - r669038;
double r669048 = 1.0;
double r669049 = r669040 * r669031;
double r669050 = r669049 - r669038;
double r669051 = r669048 / r669050;
double r669052 = r669047 * r669051;
double r669053 = r669038 + r669052;
double r669054 = r669053 / r669044;
double r669055 = r669037 ? r669045 : r669054;
return r669055;
}




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.2 |
if z < -1.2646983877022145e+132 or 3.755961250635276e+86 < z Initial program 19.7
Taylor expanded around inf 7.2
if -1.2646983877022145e+132 < z < 3.755961250635276e+86Initial program 1.3
rmApplied div-inv1.3
Final simplification3.2
herbie shell --seed 2020089 +o rules:numerics
(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)))