\frac{1 - \cos x}{\sin x}\begin{array}{l}
\mathbf{if}\;x \le -0.021475731437802487:\\
\;\;\;\;\left(\cos x \cdot \left(\cos x + 1\right) + 1 \cdot 1\right) \cdot \frac{\frac{1 - \cos x}{\cos x \cdot \left(\left(\sqrt[3]{\cos x + 1} \cdot \sqrt[3]{\cos x + 1}\right) \cdot \sqrt[3]{\cos x + 1}\right) + 1 \cdot 1}}{\sin x}\\
\mathbf{elif}\;x \le 0.024065556079906431:\\
\;\;\;\;\frac{1}{24} \cdot {x}^{3} + \left(\frac{1}{240} \cdot {x}^{5} + \frac{1}{2} \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\cos x \cdot \left(\cos x + 1\right) + 1 \cdot 1\right) \cdot \frac{\frac{1 - \cos x}{\cos x \cdot \left(\sqrt{\cos x + 1} \cdot \sqrt{\cos x + 1}\right) + 1 \cdot 1}}{\sin x}\\
\end{array}double f(double x) {
double r61866 = 1.0;
double r61867 = x;
double r61868 = cos(r61867);
double r61869 = r61866 - r61868;
double r61870 = sin(r61867);
double r61871 = r61869 / r61870;
return r61871;
}
double f(double x) {
double r61872 = x;
double r61873 = -0.021475731437802487;
bool r61874 = r61872 <= r61873;
double r61875 = cos(r61872);
double r61876 = 1.0;
double r61877 = r61875 + r61876;
double r61878 = r61875 * r61877;
double r61879 = r61876 * r61876;
double r61880 = r61878 + r61879;
double r61881 = r61876 - r61875;
double r61882 = cbrt(r61877);
double r61883 = r61882 * r61882;
double r61884 = r61883 * r61882;
double r61885 = r61875 * r61884;
double r61886 = r61885 + r61879;
double r61887 = r61881 / r61886;
double r61888 = sin(r61872);
double r61889 = r61887 / r61888;
double r61890 = r61880 * r61889;
double r61891 = 0.02406555607990643;
bool r61892 = r61872 <= r61891;
double r61893 = 0.041666666666666664;
double r61894 = 3.0;
double r61895 = pow(r61872, r61894);
double r61896 = r61893 * r61895;
double r61897 = 0.004166666666666667;
double r61898 = 5.0;
double r61899 = pow(r61872, r61898);
double r61900 = r61897 * r61899;
double r61901 = 0.5;
double r61902 = r61901 * r61872;
double r61903 = r61900 + r61902;
double r61904 = r61896 + r61903;
double r61905 = sqrt(r61877);
double r61906 = r61905 * r61905;
double r61907 = r61875 * r61906;
double r61908 = r61907 + r61879;
double r61909 = r61881 / r61908;
double r61910 = r61909 / r61888;
double r61911 = r61880 * r61910;
double r61912 = r61892 ? r61904 : r61911;
double r61913 = r61874 ? r61890 : r61912;
return r61913;
}




Bits error versus x
Results
| Original | 30.0 |
|---|---|
| Target | 0.0 |
| Herbie | 0.6 |
if x < -0.021475731437802487Initial program 0.8
rmApplied flip3--0.9
Simplified0.9
rmApplied *-un-lft-identity0.9
Applied *-un-lft-identity0.9
Applied difference-cubes0.9
Applied times-frac0.9
Applied times-frac1.0
Simplified0.9
rmApplied add-cube-cbrt1.1
if -0.021475731437802487 < x < 0.02406555607990643Initial program 59.9
Taylor expanded around 0 0.0
if 0.02406555607990643 < x Initial program 0.9
rmApplied flip3--1.0
Simplified1.0
rmApplied *-un-lft-identity1.0
Applied *-un-lft-identity1.0
Applied difference-cubes1.0
Applied times-frac1.0
Applied times-frac1.0
Simplified1.0
rmApplied add-sqr-sqrt1.1
Final simplification0.6
herbie shell --seed 2020024
(FPCore (x)
:name "tanhf (example 3.4)"
:precision binary64
:herbie-expected 2
:herbie-target
(tan (/ x 2))
(/ (- 1 (cos x)) (sin x)))