\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 r30250125 = x;
double r30250126 = y;
double r30250127 = z;
double r30250128 = r30250126 * r30250127;
double r30250129 = r30250128 - r30250125;
double r30250130 = t;
double r30250131 = r30250130 * r30250127;
double r30250132 = r30250131 - r30250125;
double r30250133 = r30250129 / r30250132;
double r30250134 = r30250125 + r30250133;
double r30250135 = 1.0;
double r30250136 = r30250125 + r30250135;
double r30250137 = r30250134 / r30250136;
return r30250137;
}
double f(double x, double y, double z, double t) {
double r30250138 = z;
double r30250139 = -7.259731899519289e-62;
bool r30250140 = r30250138 <= r30250139;
double r30250141 = 1.0;
double r30250142 = t;
double r30250143 = r30250142 * r30250138;
double r30250144 = x;
double r30250145 = r30250143 - r30250144;
double r30250146 = y;
double r30250147 = r30250145 / r30250146;
double r30250148 = r30250141 / r30250147;
double r30250149 = fma(r30250148, r30250138, r30250144);
double r30250150 = r30250144 / r30250145;
double r30250151 = r30250149 - r30250150;
double r30250152 = 1.0;
double r30250153 = r30250144 + r30250152;
double r30250154 = r30250151 / r30250153;
double r30250155 = 1.415907658888434e+57;
bool r30250156 = r30250138 <= r30250155;
double r30250157 = r30250138 * r30250146;
double r30250158 = r30250157 - r30250144;
double r30250159 = r30250141 / r30250145;
double r30250160 = r30250158 * r30250159;
double r30250161 = r30250160 + r30250144;
double r30250162 = r30250161 / r30250153;
double r30250163 = r30250146 / r30250142;
double r30250164 = r30250163 + r30250144;
double r30250165 = r30250164 / r30250153;
double r30250166 = r30250156 ? r30250162 : r30250165;
double r30250167 = r30250140 ? r30250154 : r30250166;
return r30250167;
}




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