\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 -9.822128397102382416352944524673235566637 \cdot 10^{-148}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 2.043259034829907291655254600884174757159 \cdot 10^{-242}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le 3.183191360702753125443234015952073139728 \cdot 10^{226}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\end{array}double f(double x, double y, double z) {
double r434416 = x;
double r434417 = y;
double r434418 = r434416 * r434417;
double r434419 = z;
double r434420 = r434418 / r434419;
return r434420;
}
double f(double x, double y, double z) {
double r434421 = x;
double r434422 = y;
double r434423 = r434421 * r434422;
double r434424 = -inf.0;
bool r434425 = r434423 <= r434424;
double r434426 = z;
double r434427 = r434422 / r434426;
double r434428 = r434421 * r434427;
double r434429 = -9.822128397102382e-148;
bool r434430 = r434423 <= r434429;
double r434431 = r434423 / r434426;
double r434432 = 2.0432590348299073e-242;
bool r434433 = r434423 <= r434432;
double r434434 = 3.183191360702753e+226;
bool r434435 = r434423 <= r434434;
double r434436 = r434426 / r434422;
double r434437 = r434421 / r434436;
double r434438 = r434435 ? r434431 : r434437;
double r434439 = r434433 ? r434428 : r434438;
double r434440 = r434430 ? r434431 : r434439;
double r434441 = r434425 ? r434428 : r434440;
return r434441;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.2 |
|---|---|
| Target | 6.3 |
| Herbie | 0.4 |
if (* x y) < -inf.0 or -9.822128397102382e-148 < (* x y) < 2.0432590348299073e-242Initial program 14.3
rmApplied *-un-lft-identity14.3
Applied times-frac0.6
Simplified0.6
if -inf.0 < (* x y) < -9.822128397102382e-148 or 2.0432590348299073e-242 < (* x y) < 3.183191360702753e+226Initial program 0.2
if 3.183191360702753e+226 < (* x y) Initial program 32.6
rmApplied associate-/l*1.1
Final simplification0.4
herbie shell --seed 2019304
(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.70421306606504721e-164) (/ x (/ z y)) (* (/ x z) y)))
(/ (* x y) z))