\frac{x \cdot \frac{\sin y}{y}}{z}\begin{array}{l}
\mathbf{if}\;\frac{x \cdot \frac{\sin y}{y}}{z} \le -5.40252227994517841 \cdot 10^{-206}:\\
\;\;\;\;\frac{x \cdot \frac{\sin y}{y}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \frac{1}{\frac{y}{\sin y}}\\
\end{array}double f(double x, double y, double z) {
double r474978 = x;
double r474979 = y;
double r474980 = sin(r474979);
double r474981 = r474980 / r474979;
double r474982 = r474978 * r474981;
double r474983 = z;
double r474984 = r474982 / r474983;
return r474984;
}
double f(double x, double y, double z) {
double r474985 = x;
double r474986 = y;
double r474987 = sin(r474986);
double r474988 = r474987 / r474986;
double r474989 = r474985 * r474988;
double r474990 = z;
double r474991 = r474989 / r474990;
double r474992 = -5.402522279945178e-206;
bool r474993 = r474991 <= r474992;
double r474994 = r474985 / r474990;
double r474995 = 1.0;
double r474996 = r474986 / r474987;
double r474997 = r474995 / r474996;
double r474998 = r474994 * r474997;
double r474999 = r474993 ? r474991 : r474998;
return r474999;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.9 |
|---|---|
| Target | 0.3 |
| Herbie | 1.5 |
if (/ (* x (/ (sin y) y)) z) < -5.402522279945178e-206Initial program 0.3
if -5.402522279945178e-206 < (/ (* x (/ (sin y) y)) z) Initial program 4.1
rmApplied associate-/l*3.0
Simplified3.0
rmApplied associate-/r*2.0
rmApplied div-inv2.0
Final simplification1.5
herbie shell --seed 2020045 +o rules:numerics
(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))