\tan \left(x + \varepsilon\right) - \tan x
\frac{-\left(\frac{\sin \varepsilon \cdot \cos x}{\cos \varepsilon} + \frac{\sin \varepsilon}{\frac{\cos x \cdot \cos \varepsilon}{{\left(\sin x\right)}^{2}}}\right)}{\left(-\left(1 - \tan \varepsilon \cdot \tan x\right)\right) \cdot \cos x}double code(double x, double eps) {
return ((double) (((double) tan(((double) (x + eps)))) - ((double) tan(x))));
}
double code(double x, double eps) {
return ((double) (((double) -(((double) (((double) (((double) (((double) sin(eps)) * ((double) cos(x)))) / ((double) cos(eps)))) + ((double) (((double) sin(eps)) / ((double) (((double) (((double) cos(x)) * ((double) cos(eps)))) / ((double) pow(((double) sin(x)), 2.0)))))))))) / ((double) (((double) -(((double) (1.0 - ((double) (((double) tan(eps)) * ((double) tan(x)))))))) * ((double) cos(x))))));
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.8 |
|---|---|
| Target | 14.9 |
| Herbie | 0.4 |
Initial program 36.8
rmApplied tan-sum21.8
Simplified21.8
rmApplied tan-quot21.9
Applied frac-2neg21.9
Applied frac-sub21.9
Simplified21.9
Taylor expanded around inf 0.4
rmApplied *-commutative0.4
Applied associate-/l*0.4
Final simplification0.4
herbie shell --seed 2020114
(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)))