\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.42353461194104736 \cdot 10^{-171}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 0.0:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le 3.02269632815386811 \cdot 10^{162}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\frac{z}{x}}{y}}\\
\end{array}double f(double x, double y, double z) {
double r649353 = x;
double r649354 = y;
double r649355 = r649353 * r649354;
double r649356 = z;
double r649357 = r649355 / r649356;
return r649357;
}
double f(double x, double y, double z) {
double r649358 = x;
double r649359 = y;
double r649360 = r649358 * r649359;
double r649361 = -1.4235346119410474e-171;
bool r649362 = r649360 <= r649361;
double r649363 = z;
double r649364 = r649360 / r649363;
double r649365 = 0.0;
bool r649366 = r649360 <= r649365;
double r649367 = r649359 / r649363;
double r649368 = r649358 * r649367;
double r649369 = 3.022696328153868e+162;
bool r649370 = r649360 <= r649369;
double r649371 = 1.0;
double r649372 = r649363 / r649358;
double r649373 = r649372 / r649359;
double r649374 = r649371 / r649373;
double r649375 = r649370 ? r649364 : r649374;
double r649376 = r649366 ? r649368 : r649375;
double r649377 = r649362 ? r649364 : r649376;
return r649377;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.7 |
|---|---|
| Target | 6.3 |
| Herbie | 2.4 |
if (* x y) < -1.4235346119410474e-171 or 0.0 < (* x y) < 3.022696328153868e+162Initial program 3.0
if -1.4235346119410474e-171 < (* x y) < 0.0Initial program 13.0
rmApplied *-un-lft-identity13.0
Applied times-frac0.5
Simplified0.5
if 3.022696328153868e+162 < (* x y) Initial program 20.1
rmApplied clear-num20.1
rmApplied associate-/r*2.5
Final simplification2.4
herbie shell --seed 2020020
(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))