\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 r703631 = x;
double r703632 = y;
double r703633 = r703631 * r703632;
double r703634 = z;
double r703635 = r703633 / r703634;
return r703635;
}
double f(double x, double y, double z) {
double r703636 = x;
double r703637 = y;
double r703638 = r703636 * r703637;
double r703639 = -5.232874424332301e+278;
bool r703640 = r703638 <= r703639;
double r703641 = z;
double r703642 = r703637 / r703641;
double r703643 = r703636 * r703642;
double r703644 = -1.5805766248223962e-144;
bool r703645 = r703638 <= r703644;
double r703646 = r703638 / r703641;
double r703647 = 5.4347221042537e-323;
bool r703648 = r703638 <= r703647;
double r703649 = r703641 / r703637;
double r703650 = r703636 / r703649;
double r703651 = 3.647751744013746e+127;
bool r703652 = r703638 <= r703651;
double r703653 = r703652 ? r703646 : r703643;
double r703654 = r703648 ? r703650 : r703653;
double r703655 = r703645 ? r703646 : r703654;
double r703656 = r703640 ? r703643 : r703655;
return r703656;
}




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 +o rules:numerics
(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))