\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.833851608776524 \cdot 10^{+306}:\\
\;\;\;\;\frac{1}{\frac{\frac{z}{x}}{y}}\\
\mathbf{elif}\;x \cdot y \le -1.5178017273940387 \cdot 10^{-265}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le -0.0:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \le 1.93442146399531 \cdot 10^{+132}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\end{array}double f(double x, double y, double z) {
double r36586657 = x;
double r36586658 = y;
double r36586659 = r36586657 * r36586658;
double r36586660 = z;
double r36586661 = r36586659 / r36586660;
return r36586661;
}
double f(double x, double y, double z) {
double r36586662 = x;
double r36586663 = y;
double r36586664 = r36586662 * r36586663;
double r36586665 = -1.833851608776524e+306;
bool r36586666 = r36586664 <= r36586665;
double r36586667 = 1.0;
double r36586668 = z;
double r36586669 = r36586668 / r36586662;
double r36586670 = r36586669 / r36586663;
double r36586671 = r36586667 / r36586670;
double r36586672 = -1.5178017273940387e-265;
bool r36586673 = r36586664 <= r36586672;
double r36586674 = r36586664 / r36586668;
double r36586675 = -0.0;
bool r36586676 = r36586664 <= r36586675;
double r36586677 = r36586668 / r36586663;
double r36586678 = r36586662 / r36586677;
double r36586679 = 1.93442146399531e+132;
bool r36586680 = r36586664 <= r36586679;
double r36586681 = r36586663 / r36586668;
double r36586682 = r36586662 * r36586681;
double r36586683 = r36586680 ? r36586674 : r36586682;
double r36586684 = r36586676 ? r36586678 : r36586683;
double r36586685 = r36586673 ? r36586674 : r36586684;
double r36586686 = r36586666 ? r36586671 : r36586685;
return r36586686;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.8 |
|---|---|
| Target | 5.9 |
| Herbie | 0.5 |
if (* x y) < -1.833851608776524e+306Initial program 58.8
rmApplied clear-num58.8
rmApplied associate-/r*0.4
if -1.833851608776524e+306 < (* x y) < -1.5178017273940387e-265 or -0.0 < (* x y) < 1.93442146399531e+132Initial program 0.4
if -1.5178017273940387e-265 < (* x y) < -0.0Initial program 16.4
rmApplied associate-/l*0.1
if 1.93442146399531e+132 < (* x y) Initial program 16.0
rmApplied *-un-lft-identity16.0
Applied times-frac2.5
Simplified2.5
Final simplification0.5
herbie shell --seed 2019158
(FPCore (x y z)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, A"
:herbie-target
(if (< z -4.262230790519429e-138) (/ (* x y) z) (if (< z 1.7042130660650472e-164) (/ x (/ z y)) (* (/ x z) y)))
(/ (* x y) z))