\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -2.889419895373327148972973112388967775743 \cdot 10^{-8}:\\
\;\;\;\;\frac{1}{\frac{x + 1}{\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z, t, -x\right)}, z, x\right)}} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\\
\mathbf{elif}\;z \le 8.620848150685308830177863726582628536017 \cdot 10^{89}:\\
\;\;\;\;\frac{x + \frac{\mathsf{fma}\left(z, y, -x\right) + \left(x - x\right)}{t \cdot z - x}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r1096087 = x;
double r1096088 = y;
double r1096089 = z;
double r1096090 = r1096088 * r1096089;
double r1096091 = r1096090 - r1096087;
double r1096092 = t;
double r1096093 = r1096092 * r1096089;
double r1096094 = r1096093 - r1096087;
double r1096095 = r1096091 / r1096094;
double r1096096 = r1096087 + r1096095;
double r1096097 = 1.0;
double r1096098 = r1096087 + r1096097;
double r1096099 = r1096096 / r1096098;
return r1096099;
}
double f(double x, double y, double z, double t) {
double r1096100 = z;
double r1096101 = -2.889419895373327e-08;
bool r1096102 = r1096100 <= r1096101;
double r1096103 = 1.0;
double r1096104 = x;
double r1096105 = 1.0;
double r1096106 = r1096104 + r1096105;
double r1096107 = y;
double r1096108 = t;
double r1096109 = -r1096104;
double r1096110 = fma(r1096100, r1096108, r1096109);
double r1096111 = r1096107 / r1096110;
double r1096112 = fma(r1096111, r1096100, r1096104);
double r1096113 = r1096106 / r1096112;
double r1096114 = r1096103 / r1096113;
double r1096115 = r1096108 * r1096100;
double r1096116 = r1096115 - r1096104;
double r1096117 = r1096104 / r1096116;
double r1096118 = r1096117 / r1096106;
double r1096119 = r1096114 - r1096118;
double r1096120 = 8.620848150685309e+89;
bool r1096121 = r1096100 <= r1096120;
double r1096122 = fma(r1096100, r1096107, r1096109);
double r1096123 = r1096104 - r1096104;
double r1096124 = r1096122 + r1096123;
double r1096125 = r1096124 / r1096116;
double r1096126 = r1096104 + r1096125;
double r1096127 = r1096126 / r1096106;
double r1096128 = r1096107 / r1096108;
double r1096129 = r1096104 + r1096128;
double r1096130 = r1096129 / r1096106;
double r1096131 = r1096121 ? r1096127 : r1096130;
double r1096132 = r1096102 ? r1096119 : r1096131;
return r1096132;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.7 |
|---|---|
| Target | 0.4 |
| Herbie | 3.0 |
if z < -2.889419895373327e-08Initial program 16.2
rmApplied div-sub16.2
Applied associate-+r-16.2
Applied div-sub16.2
Simplified5.4
rmApplied clear-num5.4
if -2.889419895373327e-08 < z < 8.620848150685309e+89Initial program 0.5
rmApplied add-cube-cbrt0.8
Applied prod-diff0.8
Simplified0.5
Simplified0.5
if 8.620848150685309e+89 < z Initial program 19.2
Taylor expanded around inf 7.5
Final simplification3.0
herbie shell --seed 2019303 +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)))