\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;y \le -1.14151570008284528 \cdot 10^{-287} \lor \neg \left(y \le 1.1999376738034261 \cdot 10^{-72}\right):\\
\;\;\;\;x \cdot \frac{y - z}{y}\\
\mathbf{else}:\\
\;\;\;\;x - \frac{x \cdot z}{y}\\
\end{array}double f(double x, double y, double z) {
double r803000 = x;
double r803001 = y;
double r803002 = z;
double r803003 = r803001 - r803002;
double r803004 = r803000 * r803003;
double r803005 = r803004 / r803001;
return r803005;
}
double f(double x, double y, double z) {
double r803006 = y;
double r803007 = -1.1415157000828453e-287;
bool r803008 = r803006 <= r803007;
double r803009 = 1.1999376738034261e-72;
bool r803010 = r803006 <= r803009;
double r803011 = !r803010;
bool r803012 = r803008 || r803011;
double r803013 = x;
double r803014 = z;
double r803015 = r803006 - r803014;
double r803016 = r803015 / r803006;
double r803017 = r803013 * r803016;
double r803018 = r803013 * r803014;
double r803019 = r803018 / r803006;
double r803020 = r803013 - r803019;
double r803021 = r803012 ? r803017 : r803020;
return r803021;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.9 |
|---|---|
| Target | 3.2 |
| Herbie | 2.3 |
if y < -1.1415157000828453e-287 or 1.1999376738034261e-72 < y Initial program 13.8
rmApplied *-un-lft-identity13.8
Applied times-frac1.7
Simplified1.7
if -1.1415157000828453e-287 < y < 1.1999376738034261e-72Initial program 8.8
rmApplied associate-/l*10.4
Taylor expanded around 0 5.3
Final simplification2.3
herbie shell --seed 2020062
(FPCore (x y z)
:name "Diagrams.Backend.Cairo.Internal:setTexture from diagrams-cairo-1.3.0.3"
:precision binary64
:herbie-target
(if (< z -2.060202331921739e+104) (- x (/ (* z x) y)) (if (< z 1.6939766013828526e+213) (/ x (/ y (- y z))) (* (- y z) (/ x y))))
(/ (* x (- y z)) y))