\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 8.3183219701519654 \cdot 10^{263}\right):\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r860639 = x;
double r860640 = y;
double r860641 = z;
double r860642 = r860640 * r860641;
double r860643 = r860642 - r860639;
double r860644 = t;
double r860645 = r860644 * r860641;
double r860646 = r860645 - r860639;
double r860647 = r860643 / r860646;
double r860648 = r860639 + r860647;
double r860649 = 1.0;
double r860650 = r860639 + r860649;
double r860651 = r860648 / r860650;
return r860651;
}
double f(double x, double y, double z, double t) {
double r860652 = x;
double r860653 = y;
double r860654 = z;
double r860655 = r860653 * r860654;
double r860656 = r860655 - r860652;
double r860657 = t;
double r860658 = r860657 * r860654;
double r860659 = r860658 - r860652;
double r860660 = r860656 / r860659;
double r860661 = r860652 + r860660;
double r860662 = 1.0;
double r860663 = r860652 + r860662;
double r860664 = r860661 / r860663;
double r860665 = -inf.0;
bool r860666 = r860664 <= r860665;
double r860667 = 8.318321970151965e+263;
bool r860668 = r860664 <= r860667;
double r860669 = !r860668;
bool r860670 = r860666 || r860669;
double r860671 = r860653 / r860657;
double r860672 = r860652 + r860671;
double r860673 = r860672 / r860663;
double r860674 = r860670 ? r860673 : r860664;
return r860674;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.3 |
|---|---|
| Target | 0.4 |
| Herbie | 2.1 |
if (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) < -inf.0 or 8.318321970151965e+263 < (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) Initial program 61.3
Taylor expanded around inf 14.0
if -inf.0 < (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) < 8.318321970151965e+263Initial program 0.7
Final simplification2.1
herbie shell --seed 2020046
(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)))