\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -2.660334377031037045555521559723161789378 \cdot 10^{252}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \le -1.533860280421558737181762286612661859257 \cdot 10^{-148}:\\
\;\;\;\;1 \cdot \frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 3.4301204436228912587238482013946693466 \cdot 10^{-295}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \le 3.360470352442305791587918027875262440495 \cdot 10^{146}:\\
\;\;\;\;1 \cdot \frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\end{array}double f(double x, double y, double z) {
double r701843 = x;
double r701844 = y;
double r701845 = r701843 * r701844;
double r701846 = z;
double r701847 = r701845 / r701846;
return r701847;
}
double f(double x, double y, double z) {
double r701848 = x;
double r701849 = y;
double r701850 = r701848 * r701849;
double r701851 = -2.660334377031037e+252;
bool r701852 = r701850 <= r701851;
double r701853 = z;
double r701854 = r701853 / r701849;
double r701855 = r701848 / r701854;
double r701856 = -1.5338602804215587e-148;
bool r701857 = r701850 <= r701856;
double r701858 = 1.0;
double r701859 = r701850 / r701853;
double r701860 = r701858 * r701859;
double r701861 = 3.4301204436228913e-295;
bool r701862 = r701850 <= r701861;
double r701863 = 3.360470352442306e+146;
bool r701864 = r701850 <= r701863;
double r701865 = r701849 / r701853;
double r701866 = r701848 * r701865;
double r701867 = r701864 ? r701860 : r701866;
double r701868 = r701862 ? r701855 : r701867;
double r701869 = r701857 ? r701860 : r701868;
double r701870 = r701852 ? r701855 : r701869;
return r701870;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.4 |
|---|---|
| Target | 6.4 |
| Herbie | 0.7 |
if (* x y) < -2.660334377031037e+252 or -1.5338602804215587e-148 < (* x y) < 3.4301204436228913e-295Initial program 15.8
rmApplied associate-/l*1.0
if -2.660334377031037e+252 < (* x y) < -1.5338602804215587e-148 or 3.4301204436228913e-295 < (* x y) < 3.360470352442306e+146Initial program 0.2
rmApplied clear-num0.6
rmApplied *-un-lft-identity0.6
Applied add-cube-cbrt0.6
Applied times-frac0.6
Simplified0.6
Simplified0.2
if 3.360470352442306e+146 < (* x y) Initial program 18.7
rmApplied *-un-lft-identity18.7
Applied times-frac2.6
Simplified2.6
Final simplification0.7
herbie shell --seed 2019356
(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))