\tan \left(x + \varepsilon\right) - \tan x
\left(\left(\frac{\sin \varepsilon}{\left(1 - \frac{{\left(\sin x\right)}^{3} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right) \cdot \cos \varepsilon} + \mathsf{fma}\left(\frac{{\left(\sin x\right)}^{2}}{{\left(\cos x\right)}^{2}}, \frac{{\left(\sin \varepsilon\right)}^{3}}{\left(1 - \frac{{\left(\sin x\right)}^{3} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right) \cdot {\left(\cos \varepsilon\right)}^{3}}, \frac{{\left(\sin x\right)}^{2} \cdot \sin \varepsilon}{\cos \varepsilon \cdot \left(\left(1 - \frac{{\left(\sin x\right)}^{3} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right) \cdot {\left(\cos x\right)}^{2}\right)}\right)\right) + \frac{{\left(\sin \varepsilon\right)}^{2}}{\left(1 - \frac{{\left(\sin x\right)}^{3} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right) \cdot {\left(\cos \varepsilon\right)}^{2}} \cdot \left(\frac{\sin x}{\cos x} + \frac{{\left(\sin x\right)}^{3}}{{\left(\cos x\right)}^{3}}\right)\right) + \left(\frac{\sin x}{\left(1 - \frac{{\left(\sin x\right)}^{3} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right) \cdot \cos x} - \frac{\sin x}{\cos x}\right)double f(double x, double eps) {
double r116890 = x;
double r116891 = eps;
double r116892 = r116890 + r116891;
double r116893 = tan(r116892);
double r116894 = tan(r116890);
double r116895 = r116893 - r116894;
return r116895;
}
double f(double x, double eps) {
double r116896 = eps;
double r116897 = sin(r116896);
double r116898 = 1.0;
double r116899 = x;
double r116900 = sin(r116899);
double r116901 = 3.0;
double r116902 = pow(r116900, r116901);
double r116903 = pow(r116897, r116901);
double r116904 = r116902 * r116903;
double r116905 = cos(r116899);
double r116906 = pow(r116905, r116901);
double r116907 = cos(r116896);
double r116908 = pow(r116907, r116901);
double r116909 = r116906 * r116908;
double r116910 = r116904 / r116909;
double r116911 = r116898 - r116910;
double r116912 = r116911 * r116907;
double r116913 = r116897 / r116912;
double r116914 = 2.0;
double r116915 = pow(r116900, r116914);
double r116916 = pow(r116905, r116914);
double r116917 = r116915 / r116916;
double r116918 = r116911 * r116908;
double r116919 = r116903 / r116918;
double r116920 = r116915 * r116897;
double r116921 = r116911 * r116916;
double r116922 = r116907 * r116921;
double r116923 = r116920 / r116922;
double r116924 = fma(r116917, r116919, r116923);
double r116925 = r116913 + r116924;
double r116926 = pow(r116897, r116914);
double r116927 = pow(r116907, r116914);
double r116928 = r116911 * r116927;
double r116929 = r116926 / r116928;
double r116930 = r116900 / r116905;
double r116931 = r116902 / r116906;
double r116932 = r116930 + r116931;
double r116933 = r116929 * r116932;
double r116934 = r116925 + r116933;
double r116935 = r116911 * r116905;
double r116936 = r116900 / r116935;
double r116937 = r116936 - r116930;
double r116938 = r116934 + r116937;
return r116938;
}




Bits error versus x




Bits error versus eps
| Original | 36.8 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
Initial program 36.8
rmApplied tan-sum21.6
rmApplied flip3--21.7
Applied associate-/r/21.7
Applied fma-neg21.7
Taylor expanded around inf 21.8
Simplified0.4
Final simplification0.4
herbie shell --seed 2020001 +o rules:numerics
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:precision binary64
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))