\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;\frac{x \cdot \left(y - z\right)}{y} = -\infty:\\
\;\;\;\;\frac{x}{y} \cdot \left(y - z\right)\\
\mathbf{elif}\;\frac{x \cdot \left(y - z\right)}{y} \le -588372703331281.625:\\
\;\;\;\;\frac{x \cdot \left(y - z\right)}{y}\\
\mathbf{elif}\;\frac{x \cdot \left(y - z\right)}{y} \le 2.44083856738268095 \cdot 10^{97}:\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\
\mathbf{elif}\;\frac{x \cdot \left(y - z\right)}{y} \le 3.61243343433184086 \cdot 10^{294}:\\
\;\;\;\;\frac{x \cdot \left(y - z\right)}{y}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\
\end{array}double f(double x, double y, double z) {
double r705911 = x;
double r705912 = y;
double r705913 = z;
double r705914 = r705912 - r705913;
double r705915 = r705911 * r705914;
double r705916 = r705915 / r705912;
return r705916;
}
double f(double x, double y, double z) {
double r705917 = x;
double r705918 = y;
double r705919 = z;
double r705920 = r705918 - r705919;
double r705921 = r705917 * r705920;
double r705922 = r705921 / r705918;
double r705923 = -inf.0;
bool r705924 = r705922 <= r705923;
double r705925 = r705917 / r705918;
double r705926 = r705925 * r705920;
double r705927 = -588372703331281.6;
bool r705928 = r705922 <= r705927;
double r705929 = 2.440838567382681e+97;
bool r705930 = r705922 <= r705929;
double r705931 = r705918 / r705920;
double r705932 = r705917 / r705931;
double r705933 = 3.612433434331841e+294;
bool r705934 = r705922 <= r705933;
double r705935 = r705934 ? r705922 : r705932;
double r705936 = r705930 ? r705932 : r705935;
double r705937 = r705928 ? r705922 : r705936;
double r705938 = r705924 ? r705926 : r705937;
return r705938;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.7 |
|---|---|
| Target | 3.0 |
| Herbie | 0.4 |
if (/ (* x (- y z)) y) < -inf.0Initial program 64.0
rmApplied associate-/l*0.1
rmApplied associate-/r/0.1
if -inf.0 < (/ (* x (- y z)) y) < -588372703331281.6 or 2.440838567382681e+97 < (/ (* x (- y z)) y) < 3.612433434331841e+294Initial program 0.2
if -588372703331281.6 < (/ (* x (- y z)) y) < 2.440838567382681e+97 or 3.612433434331841e+294 < (/ (* x (- y z)) y) Initial program 13.2
rmApplied associate-/l*0.6
Final simplification0.4
herbie shell --seed 2020033 +o rules:numerics
(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))