\tan \left(x + \varepsilon\right) - \tan x
\left(\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)} + \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 code(double x, double eps) {
return (tan((x + eps)) - tan(x));
}
double code(double x, double eps) {
return ((((pow(sin(x), 2.0) * sin(eps)) / (cos(eps) * ((1.0 - ((pow(sin(x), 3.0) * pow(sin(eps), 3.0)) / (pow(cos(x), 3.0) * pow(cos(eps), 3.0)))) * pow(cos(x), 2.0)))) + (sin(eps) / ((1.0 - ((pow(sin(x), 3.0) * pow(sin(eps), 3.0)) / (pow(cos(x), 3.0) * pow(cos(eps), 3.0)))) * cos(eps)))) + ((((pow(sin(x), 2.0) * pow(sin(eps), 3.0)) / (pow(cos(x), 2.0) * ((1.0 - ((pow(sin(x), 3.0) * pow(sin(eps), 3.0)) / (pow(cos(x), 3.0) * pow(cos(eps), 3.0)))) * pow(cos(eps), 3.0)))) + ((pow(sin(eps), 2.0) / ((1.0 - ((pow(sin(x), 3.0) * pow(sin(eps), 3.0)) / (pow(cos(x), 3.0) * pow(cos(eps), 3.0)))) * pow(cos(eps), 2.0))) * ((sin(x) / cos(x)) + (pow(sin(x), 3.0) / pow(cos(x), 3.0))))) + ((sin(x) / ((1.0 - ((pow(sin(x), 3.0) * pow(sin(eps), 3.0)) / (pow(cos(x), 3.0) * pow(cos(eps), 3.0)))) * cos(x))) - (sin(x) / cos(x)))));
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.4 |
| Herbie | 0.4 |
Initial program 37.1
rmApplied tan-sum21.6
rmApplied flip3--21.6
Applied associate-/r/21.6
Simplified21.6
Taylor expanded around inf 21.7
Simplified0.6
rmApplied associate--l+0.4
Final simplification0.4
herbie shell --seed 2020078
(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)))