\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin \varepsilon \cdot \frac{\sin x}{\cos \varepsilon}}{\cos x}} + \frac{\left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin \varepsilon \cdot \frac{\sin x}{\cos \varepsilon}}{\cos x}} - \frac{\sin x}{\cos x}\right) \cdot \left(\frac{\sin x}{\cos x} + \frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin \varepsilon \cdot \frac{\sin x}{\cos \varepsilon}}{\cos x}}\right)}{\frac{\sin x}{\cos x} + \frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin \varepsilon \cdot \frac{\sin x}{\cos \varepsilon}}{\cos x}}}double f(double x, double eps) {
double r6758589 = x;
double r6758590 = eps;
double r6758591 = r6758589 + r6758590;
double r6758592 = tan(r6758591);
double r6758593 = tan(r6758589);
double r6758594 = r6758592 - r6758593;
return r6758594;
}
double f(double x, double eps) {
double r6758595 = eps;
double r6758596 = sin(r6758595);
double r6758597 = cos(r6758595);
double r6758598 = r6758596 / r6758597;
double r6758599 = 1.0;
double r6758600 = x;
double r6758601 = sin(r6758600);
double r6758602 = r6758601 / r6758597;
double r6758603 = r6758596 * r6758602;
double r6758604 = cos(r6758600);
double r6758605 = r6758603 / r6758604;
double r6758606 = r6758599 - r6758605;
double r6758607 = r6758598 / r6758606;
double r6758608 = r6758601 / r6758604;
double r6758609 = r6758608 / r6758606;
double r6758610 = r6758609 - r6758608;
double r6758611 = r6758608 + r6758609;
double r6758612 = r6758610 * r6758611;
double r6758613 = r6758612 / r6758611;
double r6758614 = r6758607 + r6758613;
return r6758614;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.3 |
|---|---|
| Target | 15.3 |
| Herbie | 12.5 |
Initial program 36.3
rmApplied tan-sum21.0
Taylor expanded around inf 21.1
Simplified12.5
rmApplied flip--12.5
rmApplied difference-of-squares12.5
Final simplification12.5
herbie shell --seed 2019165
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))