\frac{1 - \cos x}{\sin x}\begin{array}{l}
\mathbf{if}\;\frac{1 - \cos x}{\sin x} \le -0.006506020429254646096628444951193159795366:\\
\;\;\;\;\frac{\frac{{1}^{3} - {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(1, 1, \cos x \cdot \frac{1 \cdot 1 - {\left(\cos x\right)}^{2}}{1 - \cos x}\right)}}{\sin x}\\
\mathbf{elif}\;\frac{1 - \cos x}{\sin x} \le 9.100983630978486083832473818588937319873 \cdot 10^{-5}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{24}, {x}^{3}, \mathsf{fma}\left(\frac{1}{240}, {x}^{5}, \frac{1}{2} \cdot x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{{\left({1}^{3}\right)}^{3} - {\left({\left(\cos x\right)}^{3}\right)}^{3}}{\mathsf{fma}\left({\left(\cos x\right)}^{3}, {1}^{3} + {\left(\cos x\right)}^{3}, {1}^{6}\right)}}{\mathsf{fma}\left(1, 1, \cos x \cdot \left(1 + \cos x\right)\right)}}{\sin x}\\
\end{array}double f(double x) {
double r49877 = 1.0;
double r49878 = x;
double r49879 = cos(r49878);
double r49880 = r49877 - r49879;
double r49881 = sin(r49878);
double r49882 = r49880 / r49881;
return r49882;
}
double f(double x) {
double r49883 = 1.0;
double r49884 = x;
double r49885 = cos(r49884);
double r49886 = r49883 - r49885;
double r49887 = sin(r49884);
double r49888 = r49886 / r49887;
double r49889 = -0.006506020429254646;
bool r49890 = r49888 <= r49889;
double r49891 = 3.0;
double r49892 = pow(r49883, r49891);
double r49893 = pow(r49885, r49891);
double r49894 = r49892 - r49893;
double r49895 = r49883 * r49883;
double r49896 = 2.0;
double r49897 = pow(r49885, r49896);
double r49898 = r49895 - r49897;
double r49899 = r49898 / r49886;
double r49900 = r49885 * r49899;
double r49901 = fma(r49883, r49883, r49900);
double r49902 = r49894 / r49901;
double r49903 = r49902 / r49887;
double r49904 = 9.100983630978486e-05;
bool r49905 = r49888 <= r49904;
double r49906 = 0.041666666666666664;
double r49907 = pow(r49884, r49891);
double r49908 = 0.004166666666666667;
double r49909 = 5.0;
double r49910 = pow(r49884, r49909);
double r49911 = 0.5;
double r49912 = r49911 * r49884;
double r49913 = fma(r49908, r49910, r49912);
double r49914 = fma(r49906, r49907, r49913);
double r49915 = pow(r49892, r49891);
double r49916 = pow(r49893, r49891);
double r49917 = r49915 - r49916;
double r49918 = r49892 + r49893;
double r49919 = 6.0;
double r49920 = pow(r49883, r49919);
double r49921 = fma(r49893, r49918, r49920);
double r49922 = r49917 / r49921;
double r49923 = r49883 + r49885;
double r49924 = r49885 * r49923;
double r49925 = fma(r49883, r49883, r49924);
double r49926 = r49922 / r49925;
double r49927 = r49926 / r49887;
double r49928 = r49905 ? r49914 : r49927;
double r49929 = r49890 ? r49903 : r49928;
return r49929;
}




Bits error versus x
| Original | 30.9 |
|---|---|
| Target | 0.0 |
| Herbie | 0.6 |
if (/ (- 1.0 (cos x)) (sin x)) < -0.006506020429254646Initial program 0.9
rmApplied *-un-lft-identity0.9
Applied *-un-lft-identity0.9
Applied times-frac0.9
Simplified0.9
rmApplied flip3--1.0
Simplified1.0
rmApplied flip-+1.0
Simplified1.0
if -0.006506020429254646 < (/ (- 1.0 (cos x)) (sin x)) < 9.100983630978486e-05Initial program 60.0
Taylor expanded around 0 0.1
Simplified0.1
if 9.100983630978486e-05 < (/ (- 1.0 (cos x)) (sin x)) Initial program 1.0
rmApplied *-un-lft-identity1.0
Applied *-un-lft-identity1.0
Applied times-frac1.0
Simplified1.0
rmApplied flip3--1.1
Simplified1.1
rmApplied flip3--1.2
Simplified1.2
Final simplification0.6
herbie shell --seed 2019350 +o rules:numerics
(FPCore (x)
:name "tanhf (example 3.4)"
:precision binary64
:herbie-expected 2
:herbie-target
(tan (/ x 2))
(/ (- 1 (cos x)) (sin x)))