\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y = -\infty:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le -9.822128397102382416352944524673235566637 \cdot 10^{-148}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 2.043259034829907291655254600884174757159 \cdot 10^{-242}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le 3.183191360702753125443234015952073139728 \cdot 10^{226}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\end{array}double f(double x, double y, double z) {
double r514871 = x;
double r514872 = y;
double r514873 = r514871 * r514872;
double r514874 = z;
double r514875 = r514873 / r514874;
return r514875;
}
double f(double x, double y, double z) {
double r514876 = x;
double r514877 = y;
double r514878 = r514876 * r514877;
double r514879 = -inf.0;
bool r514880 = r514878 <= r514879;
double r514881 = z;
double r514882 = r514877 / r514881;
double r514883 = r514876 * r514882;
double r514884 = -9.822128397102382e-148;
bool r514885 = r514878 <= r514884;
double r514886 = r514878 / r514881;
double r514887 = 2.0432590348299073e-242;
bool r514888 = r514878 <= r514887;
double r514889 = 3.183191360702753e+226;
bool r514890 = r514878 <= r514889;
double r514891 = r514881 / r514877;
double r514892 = r514876 / r514891;
double r514893 = r514890 ? r514886 : r514892;
double r514894 = r514888 ? r514883 : r514893;
double r514895 = r514885 ? r514886 : r514894;
double r514896 = r514880 ? r514883 : r514895;
return r514896;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.2 |
|---|---|
| Target | 6.3 |
| Herbie | 0.4 |
if (* x y) < -inf.0 or -9.822128397102382e-148 < (* x y) < 2.0432590348299073e-242Initial program 14.3
rmApplied *-un-lft-identity14.3
Applied times-frac0.6
Simplified0.6
if -inf.0 < (* x y) < -9.822128397102382e-148 or 2.0432590348299073e-242 < (* x y) < 3.183191360702753e+226Initial program 0.2
if 3.183191360702753e+226 < (* x y) Initial program 32.6
rmApplied associate-/l*1.1
Final simplification0.4
herbie shell --seed 2019304 +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.70421306606504721e-164) (/ x (/ z y)) (* (/ x z) y)))
(/ (* x y) z))