\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon \cdot \cos x}{\cos \varepsilon} + \frac{{\left(\sin x\right)}^{2} \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}}{\left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \cos x}double f(double x, double eps) {
double r121064 = x;
double r121065 = eps;
double r121066 = r121064 + r121065;
double r121067 = tan(r121066);
double r121068 = tan(r121064);
double r121069 = r121067 - r121068;
return r121069;
}
double f(double x, double eps) {
double r121070 = eps;
double r121071 = sin(r121070);
double r121072 = x;
double r121073 = cos(r121072);
double r121074 = r121071 * r121073;
double r121075 = cos(r121070);
double r121076 = r121074 / r121075;
double r121077 = sin(r121072);
double r121078 = 2.0;
double r121079 = pow(r121077, r121078);
double r121080 = r121079 * r121071;
double r121081 = r121073 * r121075;
double r121082 = r121080 / r121081;
double r121083 = r121076 + r121082;
double r121084 = 1.0;
double r121085 = tan(r121072);
double r121086 = tan(r121070);
double r121087 = r121085 * r121086;
double r121088 = r121084 - r121087;
double r121089 = r121088 * r121073;
double r121090 = r121083 / r121089;
return r121090;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.1 |
| Herbie | 0.4 |
Initial program 37.1
rmApplied tan-quot37.1
Applied tan-sum22.0
Applied frac-sub22.0
Taylor expanded around inf 0.4
Final simplification0.4
herbie shell --seed 2020042
(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)))