\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -1.160115839689408068409085936108477411806 \cdot 10^{172}:\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\mathbf{elif}\;z \le 3.641116230673848176898687453531338972974 \cdot 10^{130}:\\
\;\;\;\;\frac{\left(-x\right) - \frac{y \cdot z - x}{\mathsf{fma}\left(z, t, -x\right)}}{-\left(x + 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r27162248 = x;
double r27162249 = y;
double r27162250 = z;
double r27162251 = r27162249 * r27162250;
double r27162252 = r27162251 - r27162248;
double r27162253 = t;
double r27162254 = r27162253 * r27162250;
double r27162255 = r27162254 - r27162248;
double r27162256 = r27162252 / r27162255;
double r27162257 = r27162248 + r27162256;
double r27162258 = 1.0;
double r27162259 = r27162248 + r27162258;
double r27162260 = r27162257 / r27162259;
return r27162260;
}
double f(double x, double y, double z, double t) {
double r27162261 = z;
double r27162262 = -1.160115839689408e+172;
bool r27162263 = r27162261 <= r27162262;
double r27162264 = x;
double r27162265 = y;
double r27162266 = t;
double r27162267 = r27162265 / r27162266;
double r27162268 = r27162264 + r27162267;
double r27162269 = 1.0;
double r27162270 = r27162264 + r27162269;
double r27162271 = r27162268 / r27162270;
double r27162272 = 3.641116230673848e+130;
bool r27162273 = r27162261 <= r27162272;
double r27162274 = -r27162264;
double r27162275 = r27162265 * r27162261;
double r27162276 = r27162275 - r27162264;
double r27162277 = fma(r27162261, r27162266, r27162274);
double r27162278 = r27162276 / r27162277;
double r27162279 = r27162274 - r27162278;
double r27162280 = -r27162270;
double r27162281 = r27162279 / r27162280;
double r27162282 = r27162273 ? r27162281 : r27162271;
double r27162283 = r27162263 ? r27162271 : r27162282;
return r27162283;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.6 |
|---|---|
| Target | 0.4 |
| Herbie | 3.8 |
if z < -1.160115839689408e+172 or 3.641116230673848e+130 < z Initial program 22.4
Taylor expanded around inf 7.4
if -1.160115839689408e+172 < z < 3.641116230673848e+130Initial program 2.6
rmApplied clear-num2.6
rmApplied frac-2neg2.6
Simplified2.6
Final simplification3.8
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1.0))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)))