\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.42353461194104736 \cdot 10^{-171}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 0.0:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le 3.02269632815386811 \cdot 10^{162}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\frac{z}{x}}{y}}\\
\end{array}double f(double x, double y, double z) {
double r728254 = x;
double r728255 = y;
double r728256 = r728254 * r728255;
double r728257 = z;
double r728258 = r728256 / r728257;
return r728258;
}
double f(double x, double y, double z) {
double r728259 = x;
double r728260 = y;
double r728261 = r728259 * r728260;
double r728262 = -1.4235346119410474e-171;
bool r728263 = r728261 <= r728262;
double r728264 = z;
double r728265 = r728261 / r728264;
double r728266 = 0.0;
bool r728267 = r728261 <= r728266;
double r728268 = r728260 / r728264;
double r728269 = r728259 * r728268;
double r728270 = 3.022696328153868e+162;
bool r728271 = r728261 <= r728270;
double r728272 = 1.0;
double r728273 = r728264 / r728259;
double r728274 = r728273 / r728260;
double r728275 = r728272 / r728274;
double r728276 = r728271 ? r728265 : r728275;
double r728277 = r728267 ? r728269 : r728276;
double r728278 = r728263 ? r728265 : r728277;
return r728278;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.7 |
|---|---|
| Target | 6.3 |
| Herbie | 2.4 |
if (* x y) < -1.4235346119410474e-171 or 0.0 < (* x y) < 3.022696328153868e+162Initial program 3.0
if -1.4235346119410474e-171 < (* x y) < 0.0Initial program 13.0
rmApplied *-un-lft-identity13.0
Applied times-frac0.5
Simplified0.5
if 3.022696328153868e+162 < (* x y) Initial program 20.1
rmApplied clear-num20.1
rmApplied associate-/r*2.5
Final simplification2.4
herbie shell --seed 2020020 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, A"
:precision binary64
:herbie-target
(if (< z -4.262230790519429e-138) (/ (* x y) z) (if (< z 1.7042130660650472e-164) (/ x (/ z y)) (* (/ x z) y)))
(/ (* x y) z))