\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \leq -1.1864768529540578 \cdot 10^{+247}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \leq -6.403791384877416 \cdot 10^{-306} \lor \neg \left(x \cdot y \leq 6.414678060669069 \cdot 10^{-224}\right) \land x \cdot y \leq 1.9567238211991542 \cdot 10^{+162}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;y \cdot \frac{x}{z}\\
\end{array}(FPCore (x y z) :precision binary64 (/ (* x y) z))
(FPCore (x y z)
:precision binary64
(if (<= (* x y) -1.1864768529540578e+247)
(* x (/ y z))
(if (or (<= (* x y) -6.403791384877416e-306)
(and (not (<= (* x y) 6.414678060669069e-224))
(<= (* x y) 1.9567238211991542e+162)))
(/ (* x y) z)
(* y (/ x 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) <= -1.1864768529540578e+247) {
tmp = x * (y / z);
} else if (((x * y) <= -6.403791384877416e-306) || (!((x * y) <= 6.414678060669069e-224) && ((x * y) <= 1.9567238211991542e+162))) {
tmp = (x * y) / z;
} else {
tmp = y * (x / z);
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.4 |
|---|---|
| Target | 6.2 |
| Herbie | 0.4 |
if (*.f64 x y) < -1.1864768529540578e247Initial program 39.3
rmApplied *-un-lft-identity_binary6439.3
Applied times-frac_binary640.3
Simplified0.3
if -1.1864768529540578e247 < (*.f64 x y) < -6.40379138487741635e-306 or 6.41467806066906876e-224 < (*.f64 x y) < 1.9567238211991542e162Initial program 0.2
if -6.40379138487741635e-306 < (*.f64 x y) < 6.41467806066906876e-224 or 1.9567238211991542e162 < (*.f64 x y) Initial program 15.4
rmApplied add-cube-cbrt_binary6415.8
Applied times-frac_binary641.0
Taylor expanded around 0 15.4
Simplified0.6
Final simplification0.4
herbie shell --seed 2020219
(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))