\tan \left(x + \varepsilon\right) - \tan x
\frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)} + \left(\frac{1}{\cos x \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)} - \frac{1}{\cos x}\right) \cdot \sin xdouble f(double x, double eps) {
double r10359579 = x;
double r10359580 = eps;
double r10359581 = r10359579 + r10359580;
double r10359582 = tan(r10359581);
double r10359583 = tan(r10359579);
double r10359584 = r10359582 - r10359583;
return r10359584;
}
double f(double x, double eps) {
double r10359585 = eps;
double r10359586 = sin(r10359585);
double r10359587 = cos(r10359585);
double r10359588 = 1.0;
double r10359589 = x;
double r10359590 = sin(r10359589);
double r10359591 = r10359590 * r10359586;
double r10359592 = cos(r10359589);
double r10359593 = r10359592 * r10359587;
double r10359594 = r10359591 / r10359593;
double r10359595 = r10359588 - r10359594;
double r10359596 = r10359587 * r10359595;
double r10359597 = r10359586 / r10359596;
double r10359598 = r10359592 * r10359595;
double r10359599 = r10359588 / r10359598;
double r10359600 = r10359588 / r10359592;
double r10359601 = r10359599 - r10359600;
double r10359602 = r10359601 * r10359590;
double r10359603 = r10359597 + r10359602;
return r10359603;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 13.0 |
Initial program 37.1
rmApplied tan-sum21.9
Taylor expanded around -inf 22.1
rmApplied associate--l+13.0
rmApplied div-inv13.9
Applied div-inv13.1
Applied distribute-lft-out--13.0
Final simplification13.0
herbie shell --seed 2019120
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))