\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -2.6967839648114804 \cdot 10^{268}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le -7.97061052598067788 \cdot 10^{-294}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 6.0589118027638559 \cdot 10^{-195}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le 1.29204454885475858 \cdot 10^{212}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\end{array}double f(double x, double y, double z) {
double r897495 = x;
double r897496 = y;
double r897497 = r897495 * r897496;
double r897498 = z;
double r897499 = r897497 / r897498;
return r897499;
}
double f(double x, double y, double z) {
double r897500 = x;
double r897501 = y;
double r897502 = r897500 * r897501;
double r897503 = -2.6967839648114804e+268;
bool r897504 = r897502 <= r897503;
double r897505 = z;
double r897506 = r897501 / r897505;
double r897507 = r897500 * r897506;
double r897508 = -7.970610525980678e-294;
bool r897509 = r897502 <= r897508;
double r897510 = r897502 / r897505;
double r897511 = 6.058911802763856e-195;
bool r897512 = r897502 <= r897511;
double r897513 = 1.2920445488547586e+212;
bool r897514 = r897502 <= r897513;
double r897515 = r897505 / r897501;
double r897516 = r897500 / r897515;
double r897517 = r897514 ? r897510 : r897516;
double r897518 = r897512 ? r897507 : r897517;
double r897519 = r897509 ? r897510 : r897518;
double r897520 = r897504 ? r897507 : r897519;
return r897520;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.8 |
|---|---|
| Target | 5.9 |
| Herbie | 0.3 |
if (* x y) < -2.6967839648114804e+268 or -7.970610525980678e-294 < (* x y) < 6.058911802763856e-195Initial program 15.3
rmApplied *-un-lft-identity15.3
Applied times-frac0.5
Simplified0.5
if -2.6967839648114804e+268 < (* x y) < -7.970610525980678e-294 or 6.058911802763856e-195 < (* x y) < 1.2920445488547586e+212Initial program 0.2
if 1.2920445488547586e+212 < (* x y) Initial program 28.8
rmApplied associate-/l*1.2
Final simplification0.3
herbie shell --seed 2020057
(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))