\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1.0}\begin{array}{l}
\mathbf{if}\;z \le -7.259731899519289 \cdot 10^{-62}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{\frac{t \cdot z - x}{y}}, z, x\right) - \frac{x}{t \cdot z - x}}{x + 1.0}\\
\mathbf{elif}\;z \le 1.415907658888434 \cdot 10^{+57}:\\
\;\;\;\;\frac{\left(z \cdot y - x\right) \cdot \frac{1}{t \cdot z - x} + x}{x + 1.0}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{y}{t} + x}{x + 1.0}\\
\end{array}double f(double x, double y, double z, double t) {
double r27544970 = x;
double r27544971 = y;
double r27544972 = z;
double r27544973 = r27544971 * r27544972;
double r27544974 = r27544973 - r27544970;
double r27544975 = t;
double r27544976 = r27544975 * r27544972;
double r27544977 = r27544976 - r27544970;
double r27544978 = r27544974 / r27544977;
double r27544979 = r27544970 + r27544978;
double r27544980 = 1.0;
double r27544981 = r27544970 + r27544980;
double r27544982 = r27544979 / r27544981;
return r27544982;
}
double f(double x, double y, double z, double t) {
double r27544983 = z;
double r27544984 = -7.259731899519289e-62;
bool r27544985 = r27544983 <= r27544984;
double r27544986 = 1.0;
double r27544987 = t;
double r27544988 = r27544987 * r27544983;
double r27544989 = x;
double r27544990 = r27544988 - r27544989;
double r27544991 = y;
double r27544992 = r27544990 / r27544991;
double r27544993 = r27544986 / r27544992;
double r27544994 = fma(r27544993, r27544983, r27544989);
double r27544995 = r27544989 / r27544990;
double r27544996 = r27544994 - r27544995;
double r27544997 = 1.0;
double r27544998 = r27544989 + r27544997;
double r27544999 = r27544996 / r27544998;
double r27545000 = 1.415907658888434e+57;
bool r27545001 = r27544983 <= r27545000;
double r27545002 = r27544983 * r27544991;
double r27545003 = r27545002 - r27544989;
double r27545004 = r27544986 / r27544990;
double r27545005 = r27545003 * r27545004;
double r27545006 = r27545005 + r27544989;
double r27545007 = r27545006 / r27544998;
double r27545008 = r27544991 / r27544987;
double r27545009 = r27545008 + r27544989;
double r27545010 = r27545009 / r27544998;
double r27545011 = r27545001 ? r27545007 : r27545010;
double r27545012 = r27544985 ? r27544999 : r27545011;
return r27545012;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.2 |
|---|---|
| Target | 0.4 |
| Herbie | 3.2 |
if z < -7.259731899519289e-62Initial program 12.0
rmApplied div-sub12.0
Applied associate-+r-12.0
Simplified4.3
rmApplied clear-num4.5
if -7.259731899519289e-62 < z < 1.415907658888434e+57Initial program 0.3
rmApplied div-inv0.4
if 1.415907658888434e+57 < z Initial program 17.8
Taylor expanded around inf 8.2
Final simplification3.2
herbie shell --seed 2019163 +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)))