\tan \left(x + \varepsilon\right) - \tan x
\frac{\cos x \cdot \left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x \cdot \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)}{\cos x \cdot \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)}(FPCore (x eps) :precision binary64 (- (tan (+ x eps)) (tan x)))
(FPCore (x eps) :precision binary64 (/ (- (* (cos x) (+ (* (sin x) (cos eps)) (* (cos x) (sin eps)))) (* (sin x) (- (* (cos x) (cos eps)) (* (sin x) (sin eps))))) (* (cos x) (- (* (cos x) (cos eps)) (* (sin x) (sin eps))))))
double code(double x, double eps) {
return tan(x + eps) - tan(x);
}
double code(double x, double eps) {
return ((cos(x) * ((sin(x) * cos(eps)) + (cos(x) * sin(eps)))) - (sin(x) * ((cos(x) * cos(eps)) - (sin(x) * sin(eps))))) / (cos(x) * ((cos(x) * cos(eps)) - (sin(x) * sin(eps))));
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.6 |
|---|---|
| Target | 15.2 |
| Herbie | 21.5 |
Initial program 36.6
rmApplied tan-quot_binary6436.7
rmApplied sin-sum_binary6435.7
rmApplied cos-sum_binary6421.6
Simplified21.6
rmApplied tan-quot_binary6421.5
Applied frac-sub_binary6421.5
Simplified21.5
Simplified21.5
Final simplification21.5
herbie shell --seed 2020299
(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)))