\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \leq -\infty:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \leq -2.8178694528456616 \cdot 10^{-218}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \leq 3.8548113336237 \cdot 10^{-317}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \leq 1.9992129103769233 \cdot 10^{+239}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\end{array}(FPCore (x y z) :precision binary64 (/ (* x y) z))
(FPCore (x y z)
:precision binary64
(if (<= (* x y) (- INFINITY))
(/ x (/ z y))
(if (<= (* x y) -2.8178694528456616e-218)
(/ (* x y) z)
(if (<= (* x y) 3.8548113336237e-317)
(* x (/ y z))
(if (<= (* x y) 1.9992129103769233e+239)
(/ (* x y) z)
(/ x (/ z y)))))))double code(double x, double y, double z) {
return (((double) (x * y)) / z);
}
double code(double x, double y, double z) {
double tmp;
if ((((double) (x * y)) <= ((double) -(((double) INFINITY))))) {
tmp = (x / (z / y));
} else {
double tmp_1;
if ((((double) (x * y)) <= -2.8178694528456616e-218)) {
tmp_1 = (((double) (x * y)) / z);
} else {
double tmp_2;
if ((((double) (x * y)) <= 3.8548113336237e-317)) {
tmp_2 = ((double) (x * (y / z)));
} else {
double tmp_3;
if ((((double) (x * y)) <= 1.9992129103769233e+239)) {
tmp_3 = (((double) (x * y)) / z);
} else {
tmp_3 = (x / (z / y));
}
tmp_2 = tmp_3;
}
tmp_1 = tmp_2;
}
tmp = tmp_1;
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.2 |
|---|---|
| Target | 6.3 |
| Herbie | 0.3 |
if (* x y) < -inf.0 or 1.9992129103769233e239 < (* x y) Initial program Error: 43.5 bits
rmApplied associate-/l*Error: 0.6 bits
if -inf.0 < (* x y) < -2.8178694528456616e-218 or 3.85481133e-317 < (* x y) < 1.9992129103769233e239Initial program Error: 0.3 bits
if -2.8178694528456616e-218 < (* x y) < 3.85481133e-317Initial program Error: 14.7 bits
SimplifiedError: 0.4 bits
Final simplificationError: 0.3 bits
herbie shell --seed 2020204
(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))