\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \leq -3.487919808730238 \cdot 10^{+137} \lor \neg \left(z \leq 3.0393366045932753 \cdot 10^{+84}\right):\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \left(z \cdot y - x\right) \cdot \frac{1}{z \cdot t - x}}{x + 1}\\
\end{array}(FPCore (x y z t) :precision binary64 (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)))
(FPCore (x y z t) :precision binary64 (if (or (<= z -3.487919808730238e+137) (not (<= z 3.0393366045932753e+84))) (/ (+ x (/ y t)) (+ x 1.0)) (/ (+ x (* (- (* z y) x) (/ 1.0 (- (* z t) x)))) (+ x 1.0))))
double code(double x, double y, double z, double t) {
return (((double) (x + (((double) (((double) (y * z)) - x)) / ((double) (((double) (t * z)) - x))))) / ((double) (x + 1.0)));
}
double code(double x, double y, double z, double t) {
double tmp;
if (((z <= -3.487919808730238e+137) || !(z <= 3.0393366045932753e+84))) {
tmp = (((double) (x + (y / t))) / ((double) (x + 1.0)));
} else {
tmp = (((double) (x + ((double) (((double) (((double) (z * y)) - x)) * (1.0 / ((double) (((double) (z * t)) - x))))))) / ((double) (x + 1.0)));
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.6 |
|---|---|
| Target | 0.4 |
| Herbie | 3.5 |
if z < -3.4879198087302381e137 or 3.0393366045932753e84 < z Initial program 21.1
Taylor expanded around inf 8.0
if -3.4879198087302381e137 < z < 3.0393366045932753e84Initial program 1.4
rmApplied div-inv_binary641.5
Simplified1.5
Final simplification3.5
herbie shell --seed 2020205
(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.0))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)))