\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.6207759867400651 \cdot 10^{260}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le -5.6900917550780378 \cdot 10^{-61}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le -0.0:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le 4.3629336611497376 \cdot 10^{104}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\end{array}double f(double x, double y, double z) {
double r887999 = x;
double r888000 = y;
double r888001 = r887999 * r888000;
double r888002 = z;
double r888003 = r888001 / r888002;
return r888003;
}
double f(double x, double y, double z) {
double r888004 = x;
double r888005 = y;
double r888006 = r888004 * r888005;
double r888007 = -1.6207759867400651e+260;
bool r888008 = r888006 <= r888007;
double r888009 = z;
double r888010 = r888005 / r888009;
double r888011 = r888004 * r888010;
double r888012 = -5.690091755078038e-61;
bool r888013 = r888006 <= r888012;
double r888014 = r888006 / r888009;
double r888015 = -0.0;
bool r888016 = r888006 <= r888015;
double r888017 = 4.3629336611497376e+104;
bool r888018 = r888006 <= r888017;
double r888019 = r888009 / r888005;
double r888020 = r888004 / r888019;
double r888021 = r888018 ? r888014 : r888020;
double r888022 = r888016 ? r888011 : r888021;
double r888023 = r888013 ? r888014 : r888022;
double r888024 = r888008 ? r888011 : r888023;
return r888024;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.5 |
|---|---|
| Target | 6.4 |
| Herbie | 1.6 |
if (* x y) < -1.6207759867400651e+260 or -5.690091755078038e-61 < (* x y) < -0.0Initial program 13.1
rmApplied *-un-lft-identity13.1
Applied times-frac2.7
Simplified2.7
if -1.6207759867400651e+260 < (* x y) < -5.690091755078038e-61 or -0.0 < (* x y) < 4.3629336611497376e+104Initial program 0.4
if 4.3629336611497376e+104 < (* x y) Initial program 14.3
rmApplied associate-/l*3.9
Final simplification1.6
herbie shell --seed 2020042 +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))