\tan \left(x + \varepsilon\right) - \tan x
\left(\frac{\sin x \cdot {\left(\sin \varepsilon\right)}^{2}}{{\left(\cos \varepsilon\right)}^{2} \cdot \left(\left(1 - \frac{{\left(\sin x\right)}^{2} \cdot {\left(\sin \varepsilon\right)}^{2}}{{\left(\cos x\right)}^{2} \cdot {\left(\cos \varepsilon\right)}^{2}}\right) \cdot \cos x\right)} + \left(\frac{{\left(\sin x\right)}^{2}}{{\left(\cos x\right)}^{2}} + 1\right) \cdot \frac{\sin \varepsilon}{\left(1 - \frac{{\left(\sin x\right)}^{2} \cdot {\left(\sin \varepsilon\right)}^{2}}{{\left(\cos x\right)}^{2} \cdot {\left(\cos \varepsilon\right)}^{2}}\right) \cdot \cos \varepsilon}\right) + \left(\frac{\sin x}{\left(1 - \frac{{\left(\sin x\right)}^{2} \cdot {\left(\sin \varepsilon\right)}^{2}}{{\left(\cos x\right)}^{2} \cdot {\left(\cos \varepsilon\right)}^{2}}\right) \cdot \cos x} - \frac{\sin x}{\cos x}\right)double f(double x, double eps) {
double r122050 = x;
double r122051 = eps;
double r122052 = r122050 + r122051;
double r122053 = tan(r122052);
double r122054 = tan(r122050);
double r122055 = r122053 - r122054;
return r122055;
}
double f(double x, double eps) {
double r122056 = x;
double r122057 = sin(r122056);
double r122058 = eps;
double r122059 = sin(r122058);
double r122060 = 2.0;
double r122061 = pow(r122059, r122060);
double r122062 = r122057 * r122061;
double r122063 = cos(r122058);
double r122064 = pow(r122063, r122060);
double r122065 = 1.0;
double r122066 = pow(r122057, r122060);
double r122067 = r122066 * r122061;
double r122068 = cos(r122056);
double r122069 = pow(r122068, r122060);
double r122070 = r122069 * r122064;
double r122071 = r122067 / r122070;
double r122072 = r122065 - r122071;
double r122073 = r122072 * r122068;
double r122074 = r122064 * r122073;
double r122075 = r122062 / r122074;
double r122076 = r122066 / r122069;
double r122077 = r122076 + r122065;
double r122078 = r122072 * r122063;
double r122079 = r122059 / r122078;
double r122080 = r122077 * r122079;
double r122081 = r122075 + r122080;
double r122082 = r122057 / r122073;
double r122083 = r122057 / r122068;
double r122084 = r122082 - r122083;
double r122085 = r122081 + r122084;
return r122085;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.4 |
|---|---|
| Target | 15.2 |
| Herbie | 0.6 |
Initial program 37.4
rmApplied tan-sum22.1
Simplified22.1
rmApplied flip--22.2
Applied associate-/r/22.2
Simplified22.2
rmApplied swap-sqr22.2
Taylor expanded around inf 22.3
Simplified0.6
Final simplification0.6
herbie shell --seed 2020047
(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)))