\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;\frac{x \cdot y}{z} \le -2.984365653658576528026171626892729871549 \cdot 10^{240}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\mathbf{elif}\;\frac{x \cdot y}{z} \le -6.605415362301299623001202126727553395613 \cdot 10^{-208} \lor \neg \left(\frac{x \cdot y}{z} \le -0.0\right) \land \frac{x \cdot y}{z} \le 6.000688925971464265220404848603213842526 \cdot 10^{299}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\end{array}double f(double x, double y, double z) {
double r578902 = x;
double r578903 = y;
double r578904 = r578902 * r578903;
double r578905 = z;
double r578906 = r578904 / r578905;
return r578906;
}
double f(double x, double y, double z) {
double r578907 = x;
double r578908 = y;
double r578909 = r578907 * r578908;
double r578910 = z;
double r578911 = r578909 / r578910;
double r578912 = -2.9843656536585765e+240;
bool r578913 = r578911 <= r578912;
double r578914 = r578907 / r578910;
double r578915 = r578914 * r578908;
double r578916 = -6.6054153623013e-208;
bool r578917 = r578911 <= r578916;
double r578918 = -0.0;
bool r578919 = r578911 <= r578918;
double r578920 = !r578919;
double r578921 = 6.000688925971464e+299;
bool r578922 = r578911 <= r578921;
bool r578923 = r578920 && r578922;
bool r578924 = r578917 || r578923;
double r578925 = r578908 / r578910;
double r578926 = r578925 * r578907;
double r578927 = r578924 ? r578911 : r578926;
double r578928 = r578913 ? r578915 : r578927;
return r578928;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.5 |
|---|---|
| Target | 6.2 |
| Herbie | 1.7 |
if (/ (* x y) z) < -2.9843656536585765e+240Initial program 31.8
rmApplied associate-/l*7.8
rmApplied *-un-lft-identity7.8
Applied *-un-lft-identity7.8
Applied times-frac7.8
Applied *-un-lft-identity7.8
Applied times-frac7.8
Simplified7.8
Simplified10.5
if -2.9843656536585765e+240 < (/ (* x y) z) < -6.6054153623013e-208 or -0.0 < (/ (* x y) z) < 6.000688925971464e+299Initial program 2.2
if -6.6054153623013e-208 < (/ (* x y) z) < -0.0 or 6.000688925971464e+299 < (/ (* x y) z) Initial program 16.1
Simplified4.1
Final simplification1.7
herbie shell --seed 2019195
(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))