\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -5.2328744243323012 \cdot 10^{278}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le -1.5805766248223962 \cdot 10^{-144}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 5.43472 \cdot 10^{-323}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \le 3.6477517440137462 \cdot 10^{127}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\end{array}double f(double x, double y, double z) {
double r762784 = x;
double r762785 = y;
double r762786 = r762784 * r762785;
double r762787 = z;
double r762788 = r762786 / r762787;
return r762788;
}
double f(double x, double y, double z) {
double r762789 = x;
double r762790 = y;
double r762791 = r762789 * r762790;
double r762792 = -5.232874424332301e+278;
bool r762793 = r762791 <= r762792;
double r762794 = z;
double r762795 = r762790 / r762794;
double r762796 = r762789 * r762795;
double r762797 = -1.5805766248223962e-144;
bool r762798 = r762791 <= r762797;
double r762799 = r762791 / r762794;
double r762800 = 5.4347221042537e-323;
bool r762801 = r762791 <= r762800;
double r762802 = r762794 / r762790;
double r762803 = r762789 / r762802;
double r762804 = 3.647751744013746e+127;
bool r762805 = r762791 <= r762804;
double r762806 = r762805 ? r762799 : r762796;
double r762807 = r762801 ? r762803 : r762806;
double r762808 = r762798 ? r762799 : r762807;
double r762809 = r762793 ? r762796 : r762808;
return r762809;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 6.1 |
| Herbie | 0.8 |
if (* x y) < -5.232874424332301e+278 or 3.647751744013746e+127 < (* x y) Initial program 22.0
rmApplied *-un-lft-identity22.0
Applied times-frac2.9
Simplified2.9
if -5.232874424332301e+278 < (* x y) < -1.5805766248223962e-144 or 5.4347221042537e-323 < (* x y) < 3.647751744013746e+127Initial program 0.3
if -1.5805766248223962e-144 < (* x y) < 5.4347221042537e-323Initial program 11.1
rmApplied associate-/l*1.0
Final simplification0.8
herbie shell --seed 2020100
(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))