\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.7213465425126525 \cdot 10^{+172}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le -3.4578769880757935 \cdot 10^{-115}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 1.3508925074839404 \cdot 10^{-153}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;x \cdot y \le 6.859366357865012 \cdot 10^{+120}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\end{array}double f(double x, double y, double z) {
double r32112801 = x;
double r32112802 = y;
double r32112803 = r32112801 * r32112802;
double r32112804 = z;
double r32112805 = r32112803 / r32112804;
return r32112805;
}
double f(double x, double y, double z) {
double r32112806 = x;
double r32112807 = y;
double r32112808 = r32112806 * r32112807;
double r32112809 = -1.7213465425126525e+172;
bool r32112810 = r32112808 <= r32112809;
double r32112811 = z;
double r32112812 = r32112807 / r32112811;
double r32112813 = r32112806 * r32112812;
double r32112814 = -3.4578769880757935e-115;
bool r32112815 = r32112808 <= r32112814;
double r32112816 = r32112808 / r32112811;
double r32112817 = 1.3508925074839404e-153;
bool r32112818 = r32112808 <= r32112817;
double r32112819 = 6.859366357865012e+120;
bool r32112820 = r32112808 <= r32112819;
double r32112821 = r32112806 / r32112811;
double r32112822 = r32112821 * r32112807;
double r32112823 = r32112820 ? r32112816 : r32112822;
double r32112824 = r32112818 ? r32112813 : r32112823;
double r32112825 = r32112815 ? r32112816 : r32112824;
double r32112826 = r32112810 ? r32112813 : r32112825;
return r32112826;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.2 |
|---|---|
| Target | 5.9 |
| Herbie | 1.1 |
if (* x y) < -1.7213465425126525e+172 or -3.4578769880757935e-115 < (* x y) < 1.3508925074839404e-153Initial program 10.2
rmApplied *-un-lft-identity10.2
Applied times-frac1.6
Simplified1.6
if -1.7213465425126525e+172 < (* x y) < -3.4578769880757935e-115 or 1.3508925074839404e-153 < (* x y) < 6.859366357865012e+120Initial program 0.2
rmApplied *-un-lft-identity0.2
Applied times-frac11.2
Simplified11.2
rmApplied associate-*r/0.2
if 6.859366357865012e+120 < (* x y) Initial program 15.6
rmApplied associate-/l*4.1
rmApplied associate-/r/3.1
Final simplification1.1
herbie shell --seed 2019163 +o rules:numerics
(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))