\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.394495778794157817173263708359068376665 \cdot 10^{144}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\mathbf{elif}\;x \cdot y \le -2.091115834215142392182824625708863732465 \cdot 10^{-215}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 1.107151871760683778945393640864932427286 \cdot 10^{-309}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \le 8.013896806549786117243748175613103383758 \cdot 10^{151}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\end{array}double f(double x, double y, double z) {
double r988431 = x;
double r988432 = y;
double r988433 = r988431 * r988432;
double r988434 = z;
double r988435 = r988433 / r988434;
return r988435;
}
double f(double x, double y, double z) {
double r988436 = x;
double r988437 = y;
double r988438 = r988436 * r988437;
double r988439 = -1.3944957787941578e+144;
bool r988440 = r988438 <= r988439;
double r988441 = z;
double r988442 = r988436 / r988441;
double r988443 = r988442 * r988437;
double r988444 = -2.0911158342151424e-215;
bool r988445 = r988438 <= r988444;
double r988446 = r988438 / r988441;
double r988447 = 1.107151871760684e-309;
bool r988448 = r988438 <= r988447;
double r988449 = r988441 / r988437;
double r988450 = r988436 / r988449;
double r988451 = 8.013896806549786e+151;
bool r988452 = r988438 <= r988451;
double r988453 = r988452 ? r988446 : r988443;
double r988454 = r988448 ? r988450 : r988453;
double r988455 = r988445 ? r988446 : r988454;
double r988456 = r988440 ? r988443 : r988455;
return r988456;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.4 |
|---|---|
| Target | 6.3 |
| Herbie | 0.7 |
if (* x y) < -1.3944957787941578e+144 or 8.013896806549786e+151 < (* x y) Initial program 19.0
rmApplied associate-/l*2.4
rmApplied associate-/r/3.0
if -1.3944957787941578e+144 < (* x y) < -2.0911158342151424e-215 or 1.107151871760684e-309 < (* x y) < 8.013896806549786e+151Initial program 0.2
rmApplied associate-/l*9.4
Taylor expanded around 0 0.2
if -2.0911158342151424e-215 < (* x y) < 1.107151871760684e-309Initial program 14.4
rmApplied associate-/l*0.3
Final simplification0.7
herbie shell --seed 2019353
(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))