\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x}{\cos x}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x}{\cos x}} - \frac{\sin x}{\cos x}\right)double f(double x, double eps) {
double r3374624 = x;
double r3374625 = eps;
double r3374626 = r3374624 + r3374625;
double r3374627 = tan(r3374626);
double r3374628 = tan(r3374624);
double r3374629 = r3374627 - r3374628;
return r3374629;
}
double f(double x, double eps) {
double r3374630 = eps;
double r3374631 = sin(r3374630);
double r3374632 = cos(r3374630);
double r3374633 = r3374631 / r3374632;
double r3374634 = 1.0;
double r3374635 = x;
double r3374636 = sin(r3374635);
double r3374637 = r3374633 * r3374636;
double r3374638 = cos(r3374635);
double r3374639 = r3374637 / r3374638;
double r3374640 = r3374634 - r3374639;
double r3374641 = r3374633 / r3374640;
double r3374642 = r3374636 / r3374638;
double r3374643 = r3374642 / r3374640;
double r3374644 = r3374643 - r3374642;
double r3374645 = r3374641 + r3374644;
return r3374645;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.5 |
| Herbie | 12.7 |
Initial program 36.9
rmApplied tan-sum21.4
rmApplied div-inv21.4
Applied fma-neg21.4
rmApplied add-log-exp21.4
Taylor expanded around inf 21.5
Simplified12.7
Final simplification12.7
herbie shell --seed 2019163 +o rules:numerics
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))