\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(\left(\frac{{\left(\sin x\right)}^{2}}{{\left(\cos x\right)}^{2} \cdot \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(\frac{\sin \varepsilon}{\cos \varepsilon}\right)}^{3} + \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) + \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}\right) - \frac{\sin x}{\cos x}\right)double f(double x, double eps) {
double r135046 = x;
double r135047 = eps;
double r135048 = r135046 + r135047;
double r135049 = tan(r135048);
double r135050 = tan(r135046);
double r135051 = r135049 - r135050;
return r135051;
}
double f(double x, double eps) {
double r135052 = x;
double r135053 = sin(r135052);
double r135054 = 2.0;
double r135055 = pow(r135053, r135054);
double r135056 = eps;
double r135057 = cos(r135056);
double r135058 = r135055 / r135057;
double r135059 = sin(r135056);
double r135060 = 1.0;
double r135061 = 3.0;
double r135062 = pow(r135053, r135061);
double r135063 = pow(r135059, r135061);
double r135064 = r135062 * r135063;
double r135065 = cos(r135052);
double r135066 = pow(r135065, r135061);
double r135067 = pow(r135057, r135061);
double r135068 = r135066 * r135067;
double r135069 = r135064 / r135068;
double r135070 = r135060 - r135069;
double r135071 = pow(r135065, r135054);
double r135072 = r135070 * r135071;
double r135073 = r135059 / r135072;
double r135074 = r135070 * r135057;
double r135075 = r135059 / r135074;
double r135076 = fma(r135058, r135073, r135075);
double r135077 = r135071 * r135070;
double r135078 = r135055 / r135077;
double r135079 = r135059 / r135057;
double r135080 = pow(r135079, r135061);
double r135081 = r135078 * r135080;
double r135082 = pow(r135059, r135054);
double r135083 = pow(r135057, r135054);
double r135084 = r135070 * r135083;
double r135085 = r135082 / r135084;
double r135086 = r135053 / r135065;
double r135087 = r135062 / r135066;
double r135088 = r135086 + r135087;
double r135089 = r135085 * r135088;
double r135090 = r135081 + r135089;
double r135091 = r135070 * r135065;
double r135092 = r135053 / r135091;
double r135093 = r135090 + r135092;
double r135094 = r135093 - r135086;
double r135095 = r135076 + r135094;
return r135095;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 15.5 |
| Herbie | 0.5 |
Initial program 36.9
rmApplied tan-sum21.4
rmApplied tan-quot21.4
Applied associate-*r/21.4
rmApplied flip3--21.4
Applied associate-/r/21.4
Applied fma-neg21.4
Taylor expanded around -inf 21.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020060 +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)))