\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 r460175 = x;
double r460176 = y;
double r460177 = r460175 * r460176;
double r460178 = z;
double r460179 = r460177 / r460178;
return r460179;
}
double f(double x, double y, double z) {
double r460180 = x;
double r460181 = y;
double r460182 = r460180 * r460181;
double r460183 = -inf.0;
bool r460184 = r460182 <= r460183;
double r460185 = z;
double r460186 = r460181 / r460185;
double r460187 = r460180 * r460186;
double r460188 = -8.262890138825605e-174;
bool r460189 = r460182 <= r460188;
double r460190 = 1.7752395367691266e-219;
bool r460191 = r460182 <= r460190;
double r460192 = !r460191;
double r460193 = 4.6541035776417586e+206;
bool r460194 = r460182 <= r460193;
bool r460195 = r460192 && r460194;
bool r460196 = r460189 || r460195;
double r460197 = r460182 / r460185;
double r460198 = r460180 / r460185;
double r460199 = r460198 * r460181;
double r460200 = r460196 ? r460197 : r460199;
double r460201 = r460184 ? r460187 : r460200;
return r460201;
}




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))