\frac{x \cdot \frac{\sin y}{y}}{z}\begin{array}{l}
\mathbf{if}\;z \le -5593196487055916383862784:\\
\;\;\;\;\frac{x \cdot \frac{\frac{1}{y}}{\frac{1}{\sin y}}}{z}\\
\mathbf{elif}\;z \le 3.914017025903180346801946143386885523796:\\
\;\;\;\;\frac{x}{\frac{z}{\frac{\sin y}{y}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \frac{1}{\frac{y}{\sin y}}}{z}\\
\end{array}double f(double x, double y, double z) {
double r18207834 = x;
double r18207835 = y;
double r18207836 = sin(r18207835);
double r18207837 = r18207836 / r18207835;
double r18207838 = r18207834 * r18207837;
double r18207839 = z;
double r18207840 = r18207838 / r18207839;
return r18207840;
}
double f(double x, double y, double z) {
double r18207841 = z;
double r18207842 = -5.593196487055916e+24;
bool r18207843 = r18207841 <= r18207842;
double r18207844 = x;
double r18207845 = 1.0;
double r18207846 = y;
double r18207847 = r18207845 / r18207846;
double r18207848 = sin(r18207846);
double r18207849 = r18207845 / r18207848;
double r18207850 = r18207847 / r18207849;
double r18207851 = r18207844 * r18207850;
double r18207852 = r18207851 / r18207841;
double r18207853 = 3.9140170259031803;
bool r18207854 = r18207841 <= r18207853;
double r18207855 = r18207848 / r18207846;
double r18207856 = r18207841 / r18207855;
double r18207857 = r18207844 / r18207856;
double r18207858 = r18207846 / r18207848;
double r18207859 = r18207845 / r18207858;
double r18207860 = r18207844 * r18207859;
double r18207861 = r18207860 / r18207841;
double r18207862 = r18207854 ? r18207857 : r18207861;
double r18207863 = r18207843 ? r18207852 : r18207862;
return r18207863;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 2.8 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if z < -5.593196487055916e+24Initial program 0.1
rmApplied clear-num0.1
rmApplied div-inv0.2
Applied associate-/r*0.2
if -5.593196487055916e+24 < z < 3.9140170259031803Initial program 5.7
rmApplied associate-/l*0.2
if 3.9140170259031803 < z Initial program 0.1
rmApplied clear-num0.1
rmApplied div-inv0.2
Applied associate-/r*0.1
rmApplied clear-num0.2
Simplified0.1
Final simplification0.2
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x y z)
:name "Linear.Quaternion:$ctanh from linear-1.19.1.3"
:herbie-target
(if (< z -4.2173720203427147e-29) (/ (* x (/ 1.0 (/ y (sin y)))) z) (if (< z 4.446702369113811e+64) (/ x (* z (/ y (sin y)))) (/ (* x (/ 1.0 (/ y (sin y)))) z)))
(/ (* x (/ (sin y) y)) z))