\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -5.67254162541755391 \cdot 10^{-24}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{\left(x + 1\right) \cdot 1} - \frac{x \cdot \frac{1}{t \cdot z - x}}{x + 1}\\
\mathbf{elif}\;z \le 5.76566373012723862 \cdot 10^{55}:\\
\;\;\;\;\frac{x + \frac{1}{\frac{t \cdot z - x}{y \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 r752971 = x;
double r752972 = y;
double r752973 = z;
double r752974 = r752972 * r752973;
double r752975 = r752974 - r752971;
double r752976 = t;
double r752977 = r752976 * r752973;
double r752978 = r752977 - r752971;
double r752979 = r752975 / r752978;
double r752980 = r752971 + r752979;
double r752981 = 1.0;
double r752982 = r752971 + r752981;
double r752983 = r752980 / r752982;
return r752983;
}
double f(double x, double y, double z, double t) {
double r752984 = z;
double r752985 = -5.672541625417554e-24;
bool r752986 = r752984 <= r752985;
double r752987 = y;
double r752988 = t;
double r752989 = r752988 * r752984;
double r752990 = x;
double r752991 = r752989 - r752990;
double r752992 = r752987 / r752991;
double r752993 = fma(r752992, r752984, r752990);
double r752994 = 1.0;
double r752995 = r752990 + r752994;
double r752996 = 1.0;
double r752997 = r752995 * r752996;
double r752998 = r752993 / r752997;
double r752999 = r752996 / r752991;
double r753000 = r752990 * r752999;
double r753001 = r753000 / r752995;
double r753002 = r752998 - r753001;
double r753003 = 5.765663730127239e+55;
bool r753004 = r752984 <= r753003;
double r753005 = r752987 * r752984;
double r753006 = r753005 - r752990;
double r753007 = r752991 / r753006;
double r753008 = r752996 / r753007;
double r753009 = r752990 + r753008;
double r753010 = r753009 / r752995;
double r753011 = r752987 / r752988;
double r753012 = r752990 + r753011;
double r753013 = r753012 / r752995;
double r753014 = r753004 ? r753010 : r753013;
double r753015 = r752986 ? r753002 : r753014;
return r753015;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.8 |
|---|---|
| Target | 0.5 |
| Herbie | 3.4 |
if z < -5.672541625417554e-24Initial program 14.9
rmApplied div-sub14.9
Applied associate-+r-14.9
Applied div-sub14.9
Simplified5.5
rmApplied div-inv5.5
if -5.672541625417554e-24 < z < 5.765663730127239e+55Initial program 0.3
rmApplied clear-num0.3
if 5.765663730127239e+55 < z Initial program 19.0
Taylor expanded around inf 9.3
Final simplification3.4
herbie shell --seed 2020060 +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)))