\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \leq -2.7044901820336683 \cdot 10^{+112}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \leq -1.5672693784664743 \cdot 10^{-263}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \leq 4.935100862797952 \cdot 10^{-136}:\\
\;\;\;\;y \cdot \frac{x}{z}\\
\mathbf{elif}\;x \cdot y \leq 5.612311914307996 \cdot 10^{+255}:\\
\;\;\;\;\left(x \cdot y\right) \cdot \frac{1}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\end{array}double code(double x, double y, double z) {
return (((double) (x * y)) / z);
}
double code(double x, double y, double z) {
double VAR;
if ((((double) (x * y)) <= -2.7044901820336683e+112)) {
VAR = (x / (z / y));
} else {
double VAR_1;
if ((((double) (x * y)) <= -1.5672693784664743e-263)) {
VAR_1 = (((double) (x * y)) / z);
} else {
double VAR_2;
if ((((double) (x * y)) <= 4.935100862797952e-136)) {
VAR_2 = ((double) (y * (x / z)));
} else {
double VAR_3;
if ((((double) (x * y)) <= 5.612311914307996e+255)) {
VAR_3 = ((double) (((double) (x * y)) * (1.0 / z)));
} else {
VAR_3 = (x / (z / y));
}
VAR_2 = VAR_3;
}
VAR_1 = VAR_2;
}
VAR = VAR_1;
}
return VAR;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 6.2 |
| Herbie | 0.7 |
if (* x y) < -2.704490182033668e112 or 5.61231191430799618e255 < (* x y) Initial program 21.7
rmApplied associate-/l*2.3
if -2.704490182033668e112 < (* x y) < -1.5672693784664743e-263Initial program 0.2
if -1.5672693784664743e-263 < (* x y) < 4.93510086279795205e-136Initial program 9.6
rmApplied clear-num9.9
rmApplied associate-/r*1.4
rmApplied div-inv1.5
Applied add-sqr-sqrt1.5
Applied times-frac1.0
Simplified0.9
Simplified0.8
if 4.93510086279795205e-136 < (* x y) < 5.61231191430799618e255Initial program 0.3
rmApplied div-inv0.3
Final simplification0.7
herbie shell --seed 2020196
(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))