\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -2.85708464995288014 \cdot 10^{-84}:\\
\;\;\;\;\frac{1}{\frac{x + 1}{\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z, t, -x\right)}, z, x\right) - \frac{x}{t \cdot z - x}}}\\
\mathbf{elif}\;z \le 8.97764022453410417 \cdot 10^{-118}:\\
\;\;\;\;\frac{x + \left(y \cdot z - x\right) \cdot \frac{1}{t \cdot z - x}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(y \cdot \frac{1}{t \cdot z - x}, z, x\right) - \frac{x}{t \cdot z - x}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r501967 = x;
double r501968 = y;
double r501969 = z;
double r501970 = r501968 * r501969;
double r501971 = r501970 - r501967;
double r501972 = t;
double r501973 = r501972 * r501969;
double r501974 = r501973 - r501967;
double r501975 = r501971 / r501974;
double r501976 = r501967 + r501975;
double r501977 = 1.0;
double r501978 = r501967 + r501977;
double r501979 = r501976 / r501978;
return r501979;
}
double f(double x, double y, double z, double t) {
double r501980 = z;
double r501981 = -2.85708464995288e-84;
bool r501982 = r501980 <= r501981;
double r501983 = 1.0;
double r501984 = x;
double r501985 = 1.0;
double r501986 = r501984 + r501985;
double r501987 = y;
double r501988 = t;
double r501989 = -r501984;
double r501990 = fma(r501980, r501988, r501989);
double r501991 = r501987 / r501990;
double r501992 = fma(r501991, r501980, r501984);
double r501993 = r501988 * r501980;
double r501994 = r501993 - r501984;
double r501995 = r501984 / r501994;
double r501996 = r501992 - r501995;
double r501997 = r501986 / r501996;
double r501998 = r501983 / r501997;
double r501999 = 8.977640224534104e-118;
bool r502000 = r501980 <= r501999;
double r502001 = r501987 * r501980;
double r502002 = r502001 - r501984;
double r502003 = r501983 / r501994;
double r502004 = r502002 * r502003;
double r502005 = r501984 + r502004;
double r502006 = r502005 / r501986;
double r502007 = r501987 * r502003;
double r502008 = fma(r502007, r501980, r501984);
double r502009 = r502008 - r501995;
double r502010 = r502009 / r501986;
double r502011 = r502000 ? r502006 : r502010;
double r502012 = r501982 ? r501998 : r502011;
return r502012;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.4 |
|---|---|
| Target | 0.4 |
| Herbie | 3.3 |
if z < -2.85708464995288e-84Initial program 11.2
rmApplied div-sub11.2
Applied associate-+r-11.2
Simplified4.7
rmApplied clear-num4.7
if -2.85708464995288e-84 < z < 8.977640224534104e-118Initial program 0.1
rmApplied div-inv0.1
if 8.977640224534104e-118 < z Initial program 11.1
rmApplied div-sub11.1
Applied associate-+r-11.1
Simplified5.0
rmApplied div-inv5.1
Simplified5.1
Final simplification3.3
herbie shell --seed 2019198 +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)))