\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -4.4707659967563265 \cdot 10^{138}:\\
\;\;\;\;\left(x + \frac{y}{t}\right) \cdot \frac{1}{x + 1}\\
\mathbf{elif}\;z \le 8.81173598267756785 \cdot 10^{-23}:\\
\;\;\;\;\frac{x + \left(y \cdot z - x\right) \cdot \frac{1}{t \cdot z - x}}{x + 1}\\
\mathbf{elif}\;z \le 1.9006882053443136 \cdot 10^{254}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{\left(x + 1\right) \cdot 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\\
\mathbf{elif}\;z \le 4.3010845694693669 \cdot 10^{271}:\\
\;\;\;\;\left(x + \frac{y}{t}\right) \cdot \frac{1}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{\left(x + 1\right) \cdot 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r989220 = x;
double r989221 = y;
double r989222 = z;
double r989223 = r989221 * r989222;
double r989224 = r989223 - r989220;
double r989225 = t;
double r989226 = r989225 * r989222;
double r989227 = r989226 - r989220;
double r989228 = r989224 / r989227;
double r989229 = r989220 + r989228;
double r989230 = 1.0;
double r989231 = r989220 + r989230;
double r989232 = r989229 / r989231;
return r989232;
}
double f(double x, double y, double z, double t) {
double r989233 = z;
double r989234 = -4.4707659967563265e+138;
bool r989235 = r989233 <= r989234;
double r989236 = x;
double r989237 = y;
double r989238 = t;
double r989239 = r989237 / r989238;
double r989240 = r989236 + r989239;
double r989241 = 1.0;
double r989242 = 1.0;
double r989243 = r989236 + r989242;
double r989244 = r989241 / r989243;
double r989245 = r989240 * r989244;
double r989246 = 8.811735982677568e-23;
bool r989247 = r989233 <= r989246;
double r989248 = r989237 * r989233;
double r989249 = r989248 - r989236;
double r989250 = r989238 * r989233;
double r989251 = r989250 - r989236;
double r989252 = r989241 / r989251;
double r989253 = r989249 * r989252;
double r989254 = r989236 + r989253;
double r989255 = r989254 / r989243;
double r989256 = 1.9006882053443136e+254;
bool r989257 = r989233 <= r989256;
double r989258 = r989237 / r989251;
double r989259 = fma(r989258, r989233, r989236);
double r989260 = r989243 * r989241;
double r989261 = r989259 / r989260;
double r989262 = r989236 / r989251;
double r989263 = r989262 / r989243;
double r989264 = r989261 - r989263;
double r989265 = 4.301084569469367e+271;
bool r989266 = r989233 <= r989265;
double r989267 = r989266 ? r989245 : r989264;
double r989268 = r989257 ? r989264 : r989267;
double r989269 = r989247 ? r989255 : r989268;
double r989270 = r989235 ? r989245 : r989269;
return r989270;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.7 |
|---|---|
| Target | 0.3 |
| Herbie | 3.2 |
if z < -4.4707659967563265e+138 or 1.9006882053443136e+254 < z < 4.301084569469367e+271Initial program 21.1
rmApplied div-inv21.2
Taylor expanded around inf 6.6
if -4.4707659967563265e+138 < z < 8.811735982677568e-23Initial program 1.5
rmApplied div-inv1.5
if 8.811735982677568e-23 < z < 1.9006882053443136e+254 or 4.301084569469367e+271 < z Initial program 14.0
rmApplied div-sub14.0
Applied associate-+r-14.0
Applied div-sub14.0
Simplified4.9
Final simplification3.2
herbie shell --seed 2020034 +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)))