\frac{x \cdot y}{z}
\begin{array}{l}
t_0 := x \cdot \frac{y}{z}\\
\mathbf{if}\;x \cdot y \leq -2.604516891076534 \cdot 10^{+217}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;x \cdot y \leq -1.3010356389337067 \cdot 10^{-72}:\\
\;\;\;\;\left(x \cdot y\right) \cdot \frac{1}{z}\\
\mathbf{elif}\;x \cdot y \leq 2.833726387088633 \cdot 10^{-265}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;x \cdot y \leq 1.6279132317167615 \cdot 10^{+190}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\frac{z}{x}}{y}}\\
\end{array}
(FPCore (x y z) :precision binary64 (/ (* x y) z))
(FPCore (x y z)
:precision binary64
(let* ((t_0 (* x (/ y z))))
(if (<= (* x y) -2.604516891076534e+217)
t_0
(if (<= (* x y) -1.3010356389337067e-72)
(* (* x y) (/ 1.0 z))
(if (<= (* x y) 2.833726387088633e-265)
t_0
(if (<= (* x y) 1.6279132317167615e+190)
(/ (* x y) z)
(/ 1.0 (/ (/ z x) y))))))))double code(double x, double y, double z) {
return (x * y) / z;
}
double code(double x, double y, double z) {
double t_0 = x * (y / z);
double tmp;
if ((x * y) <= -2.604516891076534e+217) {
tmp = t_0;
} else if ((x * y) <= -1.3010356389337067e-72) {
tmp = (x * y) * (1.0 / z);
} else if ((x * y) <= 2.833726387088633e-265) {
tmp = t_0;
} else if ((x * y) <= 1.6279132317167615e+190) {
tmp = (x * y) / z;
} else {
tmp = 1.0 / ((z / x) / y);
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.5 |
|---|---|
| Target | 6.2 |
| Herbie | 1.0 |
if (*.f64 x y) < -2.60451689107653394e217 or -1.30103563893370669e-72 < (*.f64 x y) < 2.8337263870886332e-265Initial program 12.2
Applied *-un-lft-identity_binary6412.2
Applied times-frac_binary641.9
Simplified1.9
if -2.60451689107653394e217 < (*.f64 x y) < -1.30103563893370669e-72Initial program 0.2
Applied div-inv_binary640.4
if 2.8337263870886332e-265 < (*.f64 x y) < 1.6279132317167615e190Initial program 0.2
if 1.6279132317167615e190 < (*.f64 x y) Initial program 22.9
Applied clear-num_binary6423.0
Applied associate-/r*_binary641.5
Final simplification1.0
herbie shell --seed 2022068
(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))