\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -3.20189178708899581657271843297725010796 \cdot 10^{136}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le -4.762336977697826968317141793899825216849 \cdot 10^{-104}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 0.0:\\
\;\;\;\;\frac{1}{\frac{\frac{z}{y}}{x}}\\
\mathbf{elif}\;x \cdot y \le 5.272950596448448823066987117820011404591 \cdot 10^{145}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\end{array}double f(double x, double y, double z) {
double r49946 = x;
double r49947 = y;
double r49948 = r49946 * r49947;
double r49949 = z;
double r49950 = r49948 / r49949;
return r49950;
}
double f(double x, double y, double z) {
double r49951 = x;
double r49952 = y;
double r49953 = r49951 * r49952;
double r49954 = -3.201891787088996e+136;
bool r49955 = r49953 <= r49954;
double r49956 = z;
double r49957 = r49952 / r49956;
double r49958 = r49951 * r49957;
double r49959 = -4.762336977697827e-104;
bool r49960 = r49953 <= r49959;
double r49961 = r49953 / r49956;
double r49962 = 0.0;
bool r49963 = r49953 <= r49962;
double r49964 = 1.0;
double r49965 = r49956 / r49952;
double r49966 = r49965 / r49951;
double r49967 = r49964 / r49966;
double r49968 = 5.272950596448449e+145;
bool r49969 = r49953 <= r49968;
double r49970 = r49951 / r49956;
double r49971 = r49970 * r49952;
double r49972 = r49969 ? r49961 : r49971;
double r49973 = r49963 ? r49967 : r49972;
double r49974 = r49960 ? r49961 : r49973;
double r49975 = r49955 ? r49958 : r49974;
return r49975;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.1 |
|---|---|
| Target | 6.4 |
| Herbie | 1.4 |
if (* x y) < -3.201891787088996e+136Initial program 17.0
rmApplied *-un-lft-identity17.0
Applied times-frac2.0
Simplified2.0
if -3.201891787088996e+136 < (* x y) < -4.762336977697827e-104 or 0.0 < (* x y) < 5.272950596448449e+145Initial program 0.4
if -4.762336977697827e-104 < (* x y) < 0.0Initial program 9.7
rmApplied associate-/l*2.0
rmApplied clear-num2.7
if 5.272950596448449e+145 < (* x y) Initial program 17.6
rmApplied associate-/l*2.8
rmApplied associate-/r/2.5
Final simplification1.4
herbie shell --seed 2019310 +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))