\frac{x \cdot y}{z}
\begin{array}{l}
\mathbf{if}\;x \cdot y \leq -5.114753924499163 \cdot 10^{+234}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \leq -9.906856645491496 \cdot 10^{-248} \lor \neg \left(x \cdot y \leq 1.937 \cdot 10^{-321}\right):\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\end{array}
(FPCore (x y z) :precision binary64 (/ (* x y) z))
(FPCore (x y z)
:precision binary64
(if (<= (* x y) -5.114753924499163e+234)
(/ x (/ z y))
(if (or (<= (* x y) -9.906856645491496e-248) (not (<= (* x y) 1.937e-321)))
(/ (* x y) z)
(* x (/ y z)))))double code(double x, double y, double z) {
return (x * y) / z;
}
double code(double x, double y, double z) {
double tmp;
if ((x * y) <= -5.114753924499163e+234) {
tmp = x / (z / y);
} else if (((x * y) <= -9.906856645491496e-248) || !((x * y) <= 1.937e-321)) {
tmp = (x * y) / z;
} else {
tmp = x * (y / z);
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.3 |
|---|---|
| Target | 6.2 |
| Herbie | 1.9 |
if (*.f64 x y) < -5.11475392449916302e234Initial program 35.0
Applied associate-/l*_binary640.4
if -5.11475392449916302e234 < (*.f64 x y) < -9.9068566454914965e-248 or 1.93674e-321 < (*.f64 x y) Initial program 2.4
Applied *-un-lft-identity_binary642.4
Applied times-frac_binary648.3
Simplified8.3
Applied *-un-lft-identity_binary648.3
Applied add-cube-cbrt_binary649.2
Applied times-frac_binary649.2
Applied associate-*r*_binary644.1
Simplified4.1
Applied pow1_binary644.1
Applied pow1_binary644.1
Applied pow1_binary644.1
Applied pow-prod-down_binary644.1
Applied pow1_binary644.1
Applied pow-prod-down_binary644.1
Applied pow-prod-down_binary644.1
Simplified2.4
if -9.9068566454914965e-248 < (*.f64 x y) < 1.93674e-321Initial program 14.8
Applied *-un-lft-identity_binary6414.8
Applied times-frac_binary640.1
Simplified0.1
Final simplification1.9
herbie shell --seed 2022024
(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))