\frac{x \cdot \frac{\sin y}{y}}{z}\begin{array}{l}
\mathbf{if}\;\frac{x \cdot \frac{\sin y}{y}}{z} \le -4.797944114414283853740653503155849375579 \cdot 10^{-317} \lor \neg \left(\frac{x \cdot \frac{\sin y}{y}}{z} \le -0.0\right):\\
\;\;\;\;\frac{x \cdot \frac{\sin y}{y}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\frac{z}{x}}{\frac{\sin y}{y}}}\\
\end{array}double f(double x, double y, double z) {
double r330859 = x;
double r330860 = y;
double r330861 = sin(r330860);
double r330862 = r330861 / r330860;
double r330863 = r330859 * r330862;
double r330864 = z;
double r330865 = r330863 / r330864;
return r330865;
}
double f(double x, double y, double z) {
double r330866 = x;
double r330867 = y;
double r330868 = sin(r330867);
double r330869 = r330868 / r330867;
double r330870 = r330866 * r330869;
double r330871 = z;
double r330872 = r330870 / r330871;
double r330873 = -4.7979441144143e-317;
bool r330874 = r330872 <= r330873;
double r330875 = -0.0;
bool r330876 = r330872 <= r330875;
double r330877 = !r330876;
bool r330878 = r330874 || r330877;
double r330879 = 1.0;
double r330880 = r330871 / r330866;
double r330881 = r330880 / r330869;
double r330882 = r330879 / r330881;
double r330883 = r330878 ? r330872 : r330882;
return r330883;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.6 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
if (/ (* x (/ (sin y) y)) z) < -4.7979441144143e-317 or -0.0 < (/ (* x (/ (sin y) y)) z) Initial program 1.6
if -4.7979441144143e-317 < (/ (* x (/ (sin y) y)) z) < -0.0Initial program 9.4
rmApplied clear-num9.7
rmApplied associate-/r*0.6
Final simplification0.4
herbie shell --seed 2019326
(FPCore (x y z)
:name "Linear.Quaternion:$ctanh from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< z -4.2173720203427147e-29) (/ (* x (/ 1 (/ y (sin y)))) z) (if (< z 4.446702369113811e+64) (/ x (* z (/ y (sin y)))) (/ (* x (/ 1 (/ y (sin y)))) z)))
(/ (* x (/ (sin y) y)) z))