\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \leq -4.746092237969938 \cdot 10^{+196}:\\
\;\;\;\;x \cdot \left(y \cdot \frac{1}{z}\right)\\
\mathbf{elif}\;x \cdot y \leq -6.101342492244879 \cdot 10^{-297}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \leq 7.307020503887261 \cdot 10^{-233}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \leq 2.47984642565512 \cdot 10^{+226}:\\
\;\;\;\;\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) -4.746092237969938e+196)
(* x (* y (/ 1.0 z)))
(if (<= (* x y) -6.101342492244879e-297)
(/ (* x y) z)
(if (<= (* x y) 7.307020503887261e-233)
(/ x (/ z y))
(if (<= (* x y) 2.47984642565512e+226) (/ (* 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) <= -4.746092237969938e+196) {
tmp = x * (y * (1.0 / z));
} else if ((x * y) <= -6.101342492244879e-297) {
tmp = (x * y) / z;
} else if ((x * y) <= 7.307020503887261e-233) {
tmp = x / (z / y);
} else if ((x * y) <= 2.47984642565512e+226) {
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.4 |
| Herbie | 0.3 |
if (*.f64 x y) < -4.74609223796993785e196Initial program 22.4
rmApplied add-cube-cbrt_binary64_1989123.1
Applied times-frac_binary64_198622.1
rmApplied add-cube-cbrt_binary64_198912.4
rmApplied div-inv_binary64_198532.4
Applied associate-*l*_binary64_197972.0
Simplified0.8
if -4.74609223796993785e196 < (*.f64 x y) < -6.10134249224487921e-297 or 7.30702050388726106e-233 < (*.f64 x y) < 2.4798464256551202e226Initial program 0.2
if -6.10134249224487921e-297 < (*.f64 x y) < 7.30702050388726106e-233Initial program 14.6
rmApplied associate-/l*_binary64_198010.2
if 2.4798464256551202e226 < (*.f64 x y) Initial program 33.0
rmApplied associate-/l*_binary64_198010.8
rmApplied associate-/r/_binary64_198020.7
Final simplification0.3
herbie shell --seed 2021043
(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))