\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.7213465425126525 \cdot 10^{+172}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le -3.4578769880757935 \cdot 10^{-115}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 1.3508925074839404 \cdot 10^{-153}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le 6.859366357865012 \cdot 10^{+120}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\end{array}double f(double x, double y, double z) {
double r22863302 = x;
double r22863303 = y;
double r22863304 = r22863302 * r22863303;
double r22863305 = z;
double r22863306 = r22863304 / r22863305;
return r22863306;
}
double f(double x, double y, double z) {
double r22863307 = x;
double r22863308 = y;
double r22863309 = r22863307 * r22863308;
double r22863310 = -1.7213465425126525e+172;
bool r22863311 = r22863309 <= r22863310;
double r22863312 = z;
double r22863313 = r22863308 / r22863312;
double r22863314 = r22863307 * r22863313;
double r22863315 = -3.4578769880757935e-115;
bool r22863316 = r22863309 <= r22863315;
double r22863317 = r22863309 / r22863312;
double r22863318 = 1.3508925074839404e-153;
bool r22863319 = r22863309 <= r22863318;
double r22863320 = 6.859366357865012e+120;
bool r22863321 = r22863309 <= r22863320;
double r22863322 = r22863307 / r22863312;
double r22863323 = r22863322 * r22863308;
double r22863324 = r22863321 ? r22863317 : r22863323;
double r22863325 = r22863319 ? r22863314 : r22863324;
double r22863326 = r22863316 ? r22863317 : r22863325;
double r22863327 = r22863311 ? r22863314 : r22863326;
return r22863327;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.2 |
|---|---|
| Target | 5.9 |
| Herbie | 1.1 |
if (* x y) < -1.7213465425126525e+172 or -3.4578769880757935e-115 < (* x y) < 1.3508925074839404e-153Initial program 10.2
rmApplied *-un-lft-identity10.2
Applied times-frac1.6
Simplified1.6
if -1.7213465425126525e+172 < (* x y) < -3.4578769880757935e-115 or 1.3508925074839404e-153 < (* x y) < 6.859366357865012e+120Initial program 0.2
rmApplied *-un-lft-identity0.2
Applied times-frac11.2
Simplified11.2
rmApplied associate-*r/0.2
if 6.859366357865012e+120 < (* x y) Initial program 15.6
rmApplied associate-/l*4.1
rmApplied associate-/r/3.1
Final simplification1.1
herbie shell --seed 2019163 +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))