\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -4.784509795924599783439519186149299258721 \cdot 10^{-175}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;x \cdot y \le 2.06509035370514777050973690805775237354 \cdot 10^{-309}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;x \cdot y \le 2.556004766497536971746737596687333685074 \cdot 10^{232}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\end{array}double f(double x, double y, double z) {
double r30531871 = x;
double r30531872 = y;
double r30531873 = r30531871 * r30531872;
double r30531874 = z;
double r30531875 = r30531873 / r30531874;
return r30531875;
}
double f(double x, double y, double z) {
double r30531876 = x;
double r30531877 = y;
double r30531878 = r30531876 * r30531877;
double r30531879 = -4.7845097959246e-175;
bool r30531880 = r30531878 <= r30531879;
double r30531881 = z;
double r30531882 = r30531878 / r30531881;
double r30531883 = 2.06509035370515e-309;
bool r30531884 = r30531878 <= r30531883;
double r30531885 = r30531881 / r30531877;
double r30531886 = r30531876 / r30531885;
double r30531887 = 2.556004766497537e+232;
bool r30531888 = r30531878 <= r30531887;
double r30531889 = r30531877 / r30531881;
double r30531890 = r30531889 * r30531876;
double r30531891 = r30531888 ? r30531882 : r30531890;
double r30531892 = r30531884 ? r30531886 : r30531891;
double r30531893 = r30531880 ? r30531882 : r30531892;
return r30531893;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.4 |
|---|---|
| Target | 6.2 |
| Herbie | 1.9 |
if (* x y) < -4.7845097959246e-175 or 2.06509035370515e-309 < (* x y) < 2.556004766497537e+232Initial program 2.4
if -4.7845097959246e-175 < (* x y) < 2.06509035370515e-309Initial program 13.5
rmApplied associate-/l*0.5
if 2.556004766497537e+232 < (* x y) Initial program 31.8
rmApplied *-un-lft-identity31.8
Applied times-frac0.6
Simplified0.6
Final simplification1.9
herbie shell --seed 2019169
(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))