\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;t \le -4.0040606356777121 \cdot 10^{83} \lor \neg \left(t \le 9.5825621780559752 \cdot 10^{73}\right):\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{z}{t \cdot z - x} \cdot y + x}{\left(x + 1\right) \cdot 1} - \frac{\frac{\frac{x}{\mathsf{fma}\left(t, z, x\right)}}{t \cdot z - x} \cdot \left(t \cdot z + x\right)}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r597409 = x;
double r597410 = y;
double r597411 = z;
double r597412 = r597410 * r597411;
double r597413 = r597412 - r597409;
double r597414 = t;
double r597415 = r597414 * r597411;
double r597416 = r597415 - r597409;
double r597417 = r597413 / r597416;
double r597418 = r597409 + r597417;
double r597419 = 1.0;
double r597420 = r597409 + r597419;
double r597421 = r597418 / r597420;
return r597421;
}
double f(double x, double y, double z, double t) {
double r597422 = t;
double r597423 = -4.004060635677712e+83;
bool r597424 = r597422 <= r597423;
double r597425 = 9.582562178055975e+73;
bool r597426 = r597422 <= r597425;
double r597427 = !r597426;
bool r597428 = r597424 || r597427;
double r597429 = x;
double r597430 = y;
double r597431 = r597430 / r597422;
double r597432 = r597429 + r597431;
double r597433 = 1.0;
double r597434 = r597429 + r597433;
double r597435 = r597432 / r597434;
double r597436 = z;
double r597437 = r597422 * r597436;
double r597438 = r597437 - r597429;
double r597439 = r597436 / r597438;
double r597440 = r597439 * r597430;
double r597441 = r597440 + r597429;
double r597442 = 1.0;
double r597443 = r597434 * r597442;
double r597444 = r597441 / r597443;
double r597445 = fma(r597422, r597436, r597429);
double r597446 = r597429 / r597445;
double r597447 = r597446 / r597438;
double r597448 = r597437 + r597429;
double r597449 = r597447 * r597448;
double r597450 = r597449 / r597434;
double r597451 = r597444 - r597450;
double r597452 = r597428 ? r597435 : r597451;
return r597452;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.8 |
|---|---|
| Target | 0.3 |
| Herbie | 2.6 |
if t < -4.004060635677712e+83 or 9.582562178055975e+73 < t Initial program 9.1
Taylor expanded around inf 4.4
if -4.004060635677712e+83 < t < 9.582562178055975e+73Initial program 5.4
rmApplied div-sub5.4
Applied associate-+r-5.4
Applied div-sub5.4
Simplified4.2
rmApplied clear-num4.3
rmApplied fma-udef4.3
Simplified0.9
rmApplied flip--8.8
Applied associate-/r/8.8
Simplified1.5
Final simplification2.6
herbie shell --seed 2020035 +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)))