\tan \left(x + \varepsilon\right) - \tan x
\mathsf{fma}\left(\frac{{\left(\sin x\right)}^{2}}{\cos \varepsilon}, \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 {\left(\cos x\right)}^{2}}, \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}\right) + \left(\left(\frac{{\left(\sin x\right)}^{2} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{2} \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 \varepsilon\right)}^{3}\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)\right)double f(double x, double eps) {
double r133934 = x;
double r133935 = eps;
double r133936 = r133934 + r133935;
double r133937 = tan(r133936);
double r133938 = tan(r133934);
double r133939 = r133937 - r133938;
return r133939;
}
double f(double x, double eps) {
double r133940 = x;
double r133941 = sin(r133940);
double r133942 = 2.0;
double r133943 = pow(r133941, r133942);
double r133944 = eps;
double r133945 = cos(r133944);
double r133946 = r133943 / r133945;
double r133947 = sin(r133944);
double r133948 = 1.0;
double r133949 = 3.0;
double r133950 = pow(r133941, r133949);
double r133951 = pow(r133947, r133949);
double r133952 = r133950 * r133951;
double r133953 = cos(r133940);
double r133954 = pow(r133953, r133949);
double r133955 = pow(r133945, r133949);
double r133956 = r133954 * r133955;
double r133957 = r133952 / r133956;
double r133958 = r133948 - r133957;
double r133959 = pow(r133953, r133942);
double r133960 = r133958 * r133959;
double r133961 = r133947 / r133960;
double r133962 = r133958 * r133945;
double r133963 = r133947 / r133962;
double r133964 = fma(r133946, r133961, r133963);
double r133965 = r133943 * r133951;
double r133966 = r133958 * r133955;
double r133967 = r133959 * r133966;
double r133968 = r133965 / r133967;
double r133969 = pow(r133947, r133942);
double r133970 = pow(r133945, r133942);
double r133971 = r133958 * r133970;
double r133972 = r133969 / r133971;
double r133973 = r133941 / r133953;
double r133974 = r133950 / r133954;
double r133975 = r133973 + r133974;
double r133976 = r133972 * r133975;
double r133977 = r133968 + r133976;
double r133978 = r133958 * r133953;
double r133979 = r133941 / r133978;
double r133980 = r133979 - r133973;
double r133981 = r133977 + r133980;
double r133982 = r133964 + r133981;
return r133982;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
Initial program 36.9
rmApplied tan-sum21.7
rmApplied flip3--21.7
Applied associate-/r/21.7
Simplified21.7
Taylor expanded around inf 21.8
Simplified0.5
rmApplied associate--l+0.4
Final simplification0.4
herbie shell --seed 2020083 +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)))