\frac{x \cdot y}{z}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -3.452448754215592666401325047530086075569 \cdot 10^{-299}:\\
\;\;\;\;\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.395820271589989163064226214695740260426 \cdot 10^{278}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\end{array}double f(double x, double y, double z) {
double r482790 = x;
double r482791 = y;
double r482792 = r482790 * r482791;
double r482793 = z;
double r482794 = r482792 / r482793;
return r482794;
}
double f(double x, double y, double z) {
double r482795 = x;
double r482796 = y;
double r482797 = r482795 * r482796;
double r482798 = -3.4524487542155927e-299;
bool r482799 = r482797 <= r482798;
double r482800 = z;
double r482801 = r482797 / r482800;
double r482802 = -0.0;
bool r482803 = r482797 <= r482802;
double r482804 = r482800 / r482796;
double r482805 = r482795 / r482804;
double r482806 = 1.3958202715899892e+278;
bool r482807 = r482797 <= r482806;
double r482808 = r482796 / r482800;
double r482809 = r482795 * r482808;
double r482810 = r482807 ? r482801 : r482809;
double r482811 = r482803 ? r482805 : r482810;
double r482812 = r482799 ? r482801 : r482811;
return r482812;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.3 |
|---|---|
| Target | 6.0 |
| Herbie | 2.0 |
if (* x y) < -3.4524487542155927e-299 or -0.0 < (* x y) < 1.3958202715899892e+278Initial program 3.8
if -3.4524487542155927e-299 < (* x y) < -0.0Initial program 16.8
rmApplied associate-/l*0.1
if 1.3958202715899892e+278 < (* x y) Initial program 48.8
rmApplied *-un-lft-identity48.8
Applied times-frac0.3
Simplified0.3
Final simplification2.0
herbie shell --seed 2019208 +o rules:numerics
(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.70421306606504721e-164) (/ x (/ z y)) (* (/ x z) y)))
(/ (* x y) z))