\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.394495778794157817173263708359068376665 \cdot 10^{144}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\mathbf{elif}\;x \cdot y \le -2.091115834215142392182824625708863732465 \cdot 10^{-215}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 1.107151871760683778945393640864932427286 \cdot 10^{-309}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \le 8.013896806549786117243748175613103383758 \cdot 10^{151}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\end{array}double f(double x, double y, double z) {
double r792132 = x;
double r792133 = y;
double r792134 = r792132 * r792133;
double r792135 = z;
double r792136 = r792134 / r792135;
return r792136;
}
double f(double x, double y, double z) {
double r792137 = x;
double r792138 = y;
double r792139 = r792137 * r792138;
double r792140 = -1.3944957787941578e+144;
bool r792141 = r792139 <= r792140;
double r792142 = z;
double r792143 = r792137 / r792142;
double r792144 = r792143 * r792138;
double r792145 = -2.0911158342151424e-215;
bool r792146 = r792139 <= r792145;
double r792147 = r792139 / r792142;
double r792148 = 1.107151871760684e-309;
bool r792149 = r792139 <= r792148;
double r792150 = r792142 / r792138;
double r792151 = r792137 / r792150;
double r792152 = 8.013896806549786e+151;
bool r792153 = r792139 <= r792152;
double r792154 = r792153 ? r792147 : r792144;
double r792155 = r792149 ? r792151 : r792154;
double r792156 = r792146 ? r792147 : r792155;
double r792157 = r792141 ? r792144 : r792156;
return r792157;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.4 |
|---|---|
| Target | 6.3 |
| Herbie | 0.7 |
if (* x y) < -1.3944957787941578e+144 or 8.013896806549786e+151 < (* x y) Initial program 19.0
rmApplied associate-/l*2.4
rmApplied associate-/r/3.0
if -1.3944957787941578e+144 < (* x y) < -2.0911158342151424e-215 or 1.107151871760684e-309 < (* x y) < 8.013896806549786e+151Initial program 0.2
rmApplied associate-/l*9.4
Taylor expanded around 0 0.2
if -2.0911158342151424e-215 < (* x y) < 1.107151871760684e-309Initial program 14.4
rmApplied associate-/l*0.3
Final simplification0.7
herbie shell --seed 2019353 +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))