\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;y \cdot x \le -8.534245550996871115175132035540626568645 \cdot 10^{275}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{elif}\;y \cdot x \le -3.472696779446323935386925227685759967005 \cdot 10^{-166}:\\
\;\;\;\;\frac{y \cdot x}{z}\\
\mathbf{elif}\;y \cdot x \le 2.024155232095970608846100533696018819805 \cdot 10^{-258}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{elif}\;y \cdot x \le 2.475358399731635635401152366260838826524 \cdot 10^{251}:\\
\;\;\;\;\frac{1}{z} \cdot \left(y \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\end{array}double f(double x, double y, double z) {
double r34525128 = x;
double r34525129 = y;
double r34525130 = r34525128 * r34525129;
double r34525131 = z;
double r34525132 = r34525130 / r34525131;
return r34525132;
}
double f(double x, double y, double z) {
double r34525133 = y;
double r34525134 = x;
double r34525135 = r34525133 * r34525134;
double r34525136 = -8.534245550996871e+275;
bool r34525137 = r34525135 <= r34525136;
double r34525138 = z;
double r34525139 = r34525133 / r34525138;
double r34525140 = r34525139 * r34525134;
double r34525141 = -3.472696779446324e-166;
bool r34525142 = r34525135 <= r34525141;
double r34525143 = r34525135 / r34525138;
double r34525144 = 2.0241552320959706e-258;
bool r34525145 = r34525135 <= r34525144;
double r34525146 = 2.4753583997316356e+251;
bool r34525147 = r34525135 <= r34525146;
double r34525148 = 1.0;
double r34525149 = r34525148 / r34525138;
double r34525150 = r34525149 * r34525135;
double r34525151 = r34525138 / r34525133;
double r34525152 = r34525134 / r34525151;
double r34525153 = r34525147 ? r34525150 : r34525152;
double r34525154 = r34525145 ? r34525140 : r34525153;
double r34525155 = r34525142 ? r34525143 : r34525154;
double r34525156 = r34525137 ? r34525140 : r34525155;
return r34525156;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.6 |
|---|---|
| Target | 6.2 |
| Herbie | 0.4 |
if (* x y) < -8.534245550996871e+275 or -3.472696779446324e-166 < (* x y) < 2.0241552320959706e-258Initial program 15.9
rmApplied *-un-lft-identity15.9
Applied times-frac0.6
Simplified0.6
if -8.534245550996871e+275 < (* x y) < -3.472696779446324e-166Initial program 0.3
if 2.0241552320959706e-258 < (* x y) < 2.4753583997316356e+251Initial program 0.2
rmApplied *-un-lft-identity0.2
Applied times-frac8.5
Simplified8.5
rmApplied *-un-lft-identity8.5
Applied add-cube-cbrt9.4
Applied times-frac9.4
Applied associate-*r*2.8
Simplified2.8
rmApplied div-inv2.8
Applied associate-*r*1.3
Simplified0.3
if 2.4753583997316356e+251 < (* x y) Initial program 40.7
rmApplied associate-/l*0.6
Final simplification0.4
herbie shell --seed 2019200 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, A"
:herbie-target
(if (< z -4.262230790519429e-138) (/ (* x y) z) (if (< z 1.7042130660650472e-164) (/ x (/ z y)) (* (/ x z) y)))
(/ (* x y) z))