\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -3.51744488014109726 \cdot 10^{187}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\mathbf{elif}\;x \cdot y \le -3.5445091415403063 \cdot 10^{-180}:\\
\;\;\;\;\left(x \cdot y\right) \cdot \frac{1}{z}\\
\mathbf{elif}\;x \cdot y \le 1.57690935885075214 \cdot 10^{-150}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\mathbf{elif}\;x \cdot y \le 4.9136453820221977 \cdot 10^{217}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{z}}{\frac{1}{y}}\\
\end{array}double code(double x, double y, double z) {
return ((double) (((double) (x * y)) / z));
}
double code(double x, double y, double z) {
double VAR;
if ((((double) (x * y)) <= -3.517444880141097e+187)) {
VAR = ((double) (((double) (x / z)) * y));
} else {
double VAR_1;
if ((((double) (x * y)) <= -3.5445091415403063e-180)) {
VAR_1 = ((double) (((double) (x * y)) * ((double) (1.0 / z))));
} else {
double VAR_2;
if ((((double) (x * y)) <= 1.5769093588507521e-150)) {
VAR_2 = ((double) (((double) (x / z)) * y));
} else {
double VAR_3;
if ((((double) (x * y)) <= 4.913645382022198e+217)) {
VAR_3 = ((double) (((double) (x * y)) / z));
} else {
VAR_3 = ((double) (((double) (x / z)) / ((double) (1.0 / y))));
}
VAR_2 = VAR_3;
}
VAR_1 = VAR_2;
}
VAR = VAR_1;
}
return VAR;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.3 |
|---|---|
| Target | 6.4 |
| Herbie | 0.7 |
if (* x y) < -3.517444880141097e+187 or -3.5445091415403063e-180 < (* x y) < 1.5769093588507521e-150Initial program 11.9
rmApplied associate-/l*1.0
rmApplied associate-/r/1.1
if -3.517444880141097e+187 < (* x y) < -3.5445091415403063e-180Initial program 0.3
rmApplied div-inv0.3
if 1.5769093588507521e-150 < (* x y) < 4.913645382022198e+217Initial program 0.2
if 4.913645382022198e+217 < (* x y) Initial program 30.7
rmApplied associate-/l*1.1
rmApplied div-inv1.1
Applied associate-/r*1.5
Final simplification0.7
herbie shell --seed 2020126
(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))