\frac{x \cdot y}{z}
\begin{array}{l}
t_0 := \frac{x \cdot y}{z}\\
\mathbf{if}\;t_0 \leq -\infty:\\
\;\;\;\;\frac{1}{\frac{1}{x} \cdot \frac{z}{y}}\\
\mathbf{elif}\;t_0 \leq -1.5845934776653614 \cdot 10^{-284}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;t_0 \leq 1.0283373703112465 \cdot 10^{-308}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;t_0 \leq 1.8018552614952002 \cdot 10^{+180}:\\
\;\;\;\;\left(x \cdot y\right) \cdot \frac{1}{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
(let* ((t_0 (/ (* x y) z)))
(if (<= t_0 (- INFINITY))
(/ 1.0 (* (/ 1.0 x) (/ z y)))
(if (<= t_0 -1.5845934776653614e-284)
t_0
(if (<= t_0 1.0283373703112465e-308)
(* x (/ y z))
(if (<= t_0 1.8018552614952002e+180)
(* (* x y) (/ 1.0 z))
(/ x (/ z 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 (t_0 <= -((double) INFINITY)) {
tmp = 1.0 / ((1.0 / x) * (z / y));
} else if (t_0 <= -1.5845934776653614e-284) {
tmp = t_0;
} else if (t_0 <= 1.0283373703112465e-308) {
tmp = x * (y / z);
} else if (t_0 <= 1.8018552614952002e+180) {
tmp = (x * y) * (1.0 / z);
} else {
tmp = x / (z / y);
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.2 |
|---|---|
| Target | 5.0 |
| Herbie | 1.2 |
if (/.f64 (*.f64 x y) z) < -inf.0Initial program 12.0
Applied clear-num_binary6412.0
Applied *-un-lft-identity_binary6412.0
Applied times-frac_binary640.1
if -inf.0 < (/.f64 (*.f64 x y) z) < -1.5845934776653614e-284Initial program 0.5
if -1.5845934776653614e-284 < (/.f64 (*.f64 x y) z) < 1.0283373703112465e-308Initial program 11.3
Applied *-un-lft-identity_binary6411.3
Applied times-frac_binary640.9
Simplified0.9
if 1.0283373703112465e-308 < (/.f64 (*.f64 x y) z) < 1.80185526149520024e180Initial program 0.6
Applied div-inv_binary640.7
if 1.80185526149520024e180 < (/.f64 (*.f64 x y) z) Initial program 8.2
Applied associate-/l*_binary644.7
Final simplification1.2
herbie shell --seed 2022088
(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))