\tan \left(x + \varepsilon\right) - \tan x
\frac{\left(\frac{\sin x}{1 - \frac{\sin x \cdot \frac{\sin \varepsilon}{\cos \varepsilon}}{\cos x}} - \sin x\right) \cdot \cos x}{\cos x \cdot \cos x} + \frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin x}{\cos x}\right)}double f(double x, double eps) {
double r87824 = x;
double r87825 = eps;
double r87826 = r87824 + r87825;
double r87827 = tan(r87826);
double r87828 = tan(r87824);
double r87829 = r87827 - r87828;
return r87829;
}
double f(double x, double eps) {
double r87830 = x;
double r87831 = sin(r87830);
double r87832 = 1.0;
double r87833 = eps;
double r87834 = sin(r87833);
double r87835 = cos(r87833);
double r87836 = r87834 / r87835;
double r87837 = r87831 * r87836;
double r87838 = cos(r87830);
double r87839 = r87837 / r87838;
double r87840 = r87832 - r87839;
double r87841 = r87831 / r87840;
double r87842 = r87841 - r87831;
double r87843 = r87842 * r87838;
double r87844 = r87838 * r87838;
double r87845 = r87843 / r87844;
double r87846 = r87831 / r87838;
double r87847 = r87836 * r87846;
double r87848 = r87832 - r87847;
double r87849 = r87835 * r87848;
double r87850 = r87834 / r87849;
double r87851 = r87845 + r87850;
return r87851;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.0 |
|---|---|
| Target | 15.2 |
| Herbie | 12.5 |
Initial program 37.0
rmApplied tan-sum21.6
Simplified21.6
Taylor expanded around inf 21.7
Simplified12.6
rmApplied frac-sub12.6
Simplified12.5
Final simplification12.5
herbie shell --seed 2019194
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))