\frac{x \cdot y}{z}
\begin{array}{l}
\mathbf{if}\;x \cdot y \leq -2.604516891076534 \cdot 10^{+217}:\\
\;\;\;\;y \cdot \frac{x}{z}\\
\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}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\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
(if (<= (* x y) -2.604516891076534e+217)
(* y (/ x z))
(if (<= (* x y) -1.3010356389337067e-72)
(* (* x y) (/ 1.0 z))
(if (<= (* x y) 2.833726387088633e-265)
(* x (/ y z))
(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 tmp;
if ((x * y) <= -2.604516891076534e+217) {
tmp = y * (x / z);
} else if ((x * y) <= -1.3010356389337067e-72) {
tmp = (x * y) * (1.0 / z);
} else if ((x * y) <= 2.833726387088633e-265) {
tmp = x * (y / z);
} 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.60451689107653394e217Initial program 28.4
Applied clear-num_binary6428.5
Applied associate-/r*_binary640.7
Applied div-inv_binary640.7
Applied add-cube-cbrt_binary640.7
Applied times-frac_binary640.8
Simplified0.6
Simplified0.6
if -2.60451689107653394e217 < (*.f64 x y) < -1.30103563893370669e-72Initial program 0.2
Applied clear-num_binary640.5
Applied associate-/r*_binary6411.1
Applied *-un-lft-identity_binary6411.1
Applied div-inv_binary6411.2
Applied times-frac_binary640.6
Applied add-cube-cbrt_binary640.6
Applied times-frac_binary640.5
Simplified0.5
Simplified0.4
if -1.30103563893370669e-72 < (*.f64 x y) < 2.8337263870886332e-265Initial program 9.5
Applied *-un-lft-identity_binary649.5
Applied times-frac_binary642.1
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))