\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 r30750054 = x;
double r30750055 = y;
double r30750056 = z;
double r30750057 = r30750055 * r30750056;
double r30750058 = r30750057 - r30750054;
double r30750059 = t;
double r30750060 = r30750059 * r30750056;
double r30750061 = r30750060 - r30750054;
double r30750062 = r30750058 / r30750061;
double r30750063 = r30750054 + r30750062;
double r30750064 = 1.0;
double r30750065 = r30750054 + r30750064;
double r30750066 = r30750063 / r30750065;
return r30750066;
}
double f(double x, double y, double z, double t) {
double r30750067 = z;
double r30750068 = -7.259731899519289e-62;
bool r30750069 = r30750067 <= r30750068;
double r30750070 = 1.0;
double r30750071 = t;
double r30750072 = r30750071 * r30750067;
double r30750073 = x;
double r30750074 = r30750072 - r30750073;
double r30750075 = y;
double r30750076 = r30750074 / r30750075;
double r30750077 = r30750070 / r30750076;
double r30750078 = fma(r30750077, r30750067, r30750073);
double r30750079 = r30750073 / r30750074;
double r30750080 = r30750078 - r30750079;
double r30750081 = 1.0;
double r30750082 = r30750073 + r30750081;
double r30750083 = r30750080 / r30750082;
double r30750084 = 1.415907658888434e+57;
bool r30750085 = r30750067 <= r30750084;
double r30750086 = r30750067 * r30750075;
double r30750087 = r30750086 - r30750073;
double r30750088 = r30750070 / r30750074;
double r30750089 = r30750087 * r30750088;
double r30750090 = r30750089 + r30750073;
double r30750091 = r30750090 / r30750082;
double r30750092 = r30750075 / r30750071;
double r30750093 = r30750092 + r30750073;
double r30750094 = r30750093 / r30750082;
double r30750095 = r30750085 ? r30750091 : r30750094;
double r30750096 = r30750069 ? r30750083 : r30750095;
return r30750096;
}




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)))