\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 r165895 = x;
double r165896 = eps;
double r165897 = r165895 + r165896;
double r165898 = tan(r165897);
double r165899 = tan(r165895);
double r165900 = r165898 - r165899;
return r165900;
}
double f(double x, double eps) {
double r165901 = eps;
double r165902 = sin(r165901);
double r165903 = 1.0;
double r165904 = x;
double r165905 = sin(r165904);
double r165906 = 3.0;
double r165907 = pow(r165905, r165906);
double r165908 = pow(r165902, r165906);
double r165909 = r165907 * r165908;
double r165910 = cos(r165904);
double r165911 = pow(r165910, r165906);
double r165912 = cos(r165901);
double r165913 = pow(r165912, r165906);
double r165914 = r165911 * r165913;
double r165915 = r165909 / r165914;
double r165916 = r165903 - r165915;
double r165917 = r165916 * r165912;
double r165918 = r165902 / r165917;
double r165919 = 2.0;
double r165920 = pow(r165905, r165919);
double r165921 = pow(r165910, r165919);
double r165922 = r165920 / r165921;
double r165923 = r165916 * r165913;
double r165924 = r165908 / r165923;
double r165925 = r165920 * r165902;
double r165926 = r165916 * r165921;
double r165927 = r165912 * r165926;
double r165928 = r165925 / r165927;
double r165929 = fma(r165922, r165924, r165928);
double r165930 = r165918 + r165929;
double r165931 = pow(r165902, r165919);
double r165932 = pow(r165912, r165919);
double r165933 = r165916 * r165932;
double r165934 = r165931 / r165933;
double r165935 = r165905 / r165910;
double r165936 = r165907 / r165911;
double r165937 = r165935 + r165936;
double r165938 = r165934 * r165937;
double r165939 = r165930 + r165938;
double r165940 = r165916 * r165910;
double r165941 = r165905 / r165940;
double r165942 = r165941 - r165935;
double r165943 = r165939 + r165942;
return r165943;
}




Bits error versus x




Bits error versus eps
| Original | 36.7 |
|---|---|
| Target | 15.1 |
| Herbie | 0.4 |
Initial program 36.7
rmApplied tan-sum21.6
rmApplied flip3--21.7
Applied associate-/r/21.7
Applied fma-neg21.6
Taylor expanded around inf 21.8
Simplified0.4
Final simplification0.4
herbie shell --seed 2020089 +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)))