\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 r40128 = x;
double r40129 = y;
double r40130 = r40128 * r40129;
double r40131 = z;
double r40132 = r40130 / r40131;
return r40132;
}
double f(double x, double y, double z) {
double r40133 = x;
double r40134 = y;
double r40135 = r40133 * r40134;
double r40136 = -3.201891787088996e+136;
bool r40137 = r40135 <= r40136;
double r40138 = z;
double r40139 = r40134 / r40138;
double r40140 = r40133 * r40139;
double r40141 = -4.762336977697827e-104;
bool r40142 = r40135 <= r40141;
double r40143 = r40135 / r40138;
double r40144 = 0.0;
bool r40145 = r40135 <= r40144;
double r40146 = 1.0;
double r40147 = r40138 / r40134;
double r40148 = r40147 / r40133;
double r40149 = r40146 / r40148;
double r40150 = 5.272950596448449e+145;
bool r40151 = r40135 <= r40150;
double r40152 = r40133 / r40138;
double r40153 = r40152 * r40134;
double r40154 = r40151 ? r40143 : r40153;
double r40155 = r40145 ? r40149 : r40154;
double r40156 = r40142 ? r40143 : r40155;
double r40157 = r40137 ? r40140 : r40156;
return r40157;
}




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 div-inv2.0
Applied associate-/r*1.4
rmApplied *-un-lft-identity1.4
Applied *-un-lft-identity1.4
Applied times-frac1.4
Applied associate-/l*2.1
Simplified2.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
(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))