\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1} = -\infty \lor \neg \left(\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1} \le 1.17519594851290092 \cdot 10^{297}\right):\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{1}{\left(t \cdot z - x\right) \cdot \frac{1}{y \cdot z - x}}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r830109 = x;
double r830110 = y;
double r830111 = z;
double r830112 = r830110 * r830111;
double r830113 = r830112 - r830109;
double r830114 = t;
double r830115 = r830114 * r830111;
double r830116 = r830115 - r830109;
double r830117 = r830113 / r830116;
double r830118 = r830109 + r830117;
double r830119 = 1.0;
double r830120 = r830109 + r830119;
double r830121 = r830118 / r830120;
return r830121;
}
double f(double x, double y, double z, double t) {
double r830122 = x;
double r830123 = y;
double r830124 = z;
double r830125 = r830123 * r830124;
double r830126 = r830125 - r830122;
double r830127 = t;
double r830128 = r830127 * r830124;
double r830129 = r830128 - r830122;
double r830130 = r830126 / r830129;
double r830131 = r830122 + r830130;
double r830132 = 1.0;
double r830133 = r830122 + r830132;
double r830134 = r830131 / r830133;
double r830135 = -inf.0;
bool r830136 = r830134 <= r830135;
double r830137 = 1.1751959485129009e+297;
bool r830138 = r830134 <= r830137;
double r830139 = !r830138;
bool r830140 = r830136 || r830139;
double r830141 = r830123 / r830127;
double r830142 = r830122 + r830141;
double r830143 = r830142 / r830133;
double r830144 = 1.0;
double r830145 = r830144 / r830126;
double r830146 = r830129 * r830145;
double r830147 = r830144 / r830146;
double r830148 = r830122 + r830147;
double r830149 = r830148 / r830133;
double r830150 = r830140 ? r830143 : r830149;
return r830150;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.4 |
|---|---|
| Target | 0.4 |
| Herbie | 2.3 |
if (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) < -inf.0 or 1.1751959485129009e+297 < (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) Initial program 63.5
Taylor expanded around inf 14.8
if -inf.0 < (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) < 1.1751959485129009e+297Initial program 0.7
rmApplied clear-num0.8
rmApplied div-inv0.8
Final simplification2.3
herbie shell --seed 2020100
(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))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))