\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y = -\infty:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le -8.262890138825605465511184669818653865175 \cdot 10^{-174} \lor \neg \left(x \cdot y \le 1.775239536769126579734755404861004766773 \cdot 10^{-219}\right) \land x \cdot y \le 4.654103577641758604718829078963007975589 \cdot 10^{206}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\end{array}double f(double x, double y, double z) {
double r483874 = x;
double r483875 = y;
double r483876 = r483874 * r483875;
double r483877 = z;
double r483878 = r483876 / r483877;
return r483878;
}
double f(double x, double y, double z) {
double r483879 = x;
double r483880 = y;
double r483881 = r483879 * r483880;
double r483882 = -inf.0;
bool r483883 = r483881 <= r483882;
double r483884 = z;
double r483885 = r483880 / r483884;
double r483886 = r483879 * r483885;
double r483887 = -8.262890138825605e-174;
bool r483888 = r483881 <= r483887;
double r483889 = 1.7752395367691266e-219;
bool r483890 = r483881 <= r483889;
double r483891 = !r483890;
double r483892 = 4.6541035776417586e+206;
bool r483893 = r483881 <= r483892;
bool r483894 = r483891 && r483893;
bool r483895 = r483888 || r483894;
double r483896 = r483881 / r483884;
double r483897 = r483879 / r483884;
double r483898 = r483897 * r483880;
double r483899 = r483895 ? r483896 : r483898;
double r483900 = r483883 ? r483886 : r483899;
return r483900;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.5 |
|---|---|
| Target | 6.5 |
| Herbie | 0.4 |
if (* x y) < -inf.0Initial program 64.0
rmApplied *-un-lft-identity64.0
Applied times-frac0.3
Simplified0.3
if -inf.0 < (* x y) < -8.262890138825605e-174 or 1.7752395367691266e-219 < (* x y) < 4.6541035776417586e+206Initial program 0.2
if -8.262890138825605e-174 < (* x y) < 1.7752395367691266e-219 or 4.6541035776417586e+206 < (* x y) Initial program 13.4
rmApplied associate-/l*0.8
rmApplied associate-/r/0.7
Final simplification0.4
herbie shell --seed 2019326
(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))