\tan \left(x + \varepsilon\right) - \tan x
\left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin \varepsilon \cdot \frac{\sin x}{\cos x}}{\cos \varepsilon}} - \frac{\sin x}{\cos x}\right) + \frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - \frac{\frac{\sin \varepsilon}{\cos x} \cdot \sin x}{\cos \varepsilon}\right)}double f(double x, double eps) {
double r4635235 = x;
double r4635236 = eps;
double r4635237 = r4635235 + r4635236;
double r4635238 = tan(r4635237);
double r4635239 = tan(r4635235);
double r4635240 = r4635238 - r4635239;
return r4635240;
}
double f(double x, double eps) {
double r4635241 = x;
double r4635242 = sin(r4635241);
double r4635243 = cos(r4635241);
double r4635244 = r4635242 / r4635243;
double r4635245 = 1.0;
double r4635246 = eps;
double r4635247 = sin(r4635246);
double r4635248 = r4635247 * r4635244;
double r4635249 = cos(r4635246);
double r4635250 = r4635248 / r4635249;
double r4635251 = r4635245 - r4635250;
double r4635252 = r4635244 / r4635251;
double r4635253 = r4635252 - r4635244;
double r4635254 = r4635247 / r4635243;
double r4635255 = r4635254 * r4635242;
double r4635256 = r4635255 / r4635249;
double r4635257 = r4635245 - r4635256;
double r4635258 = r4635249 * r4635257;
double r4635259 = r4635247 / r4635258;
double r4635260 = r4635253 + r4635259;
return r4635260;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.0 |
|---|---|
| Target | 14.6 |
| Herbie | 13.4 |
Initial program 37.0
rmApplied tan-sum22.5
Taylor expanded around inf 22.6
Simplified13.4
rmApplied div-inv13.4
Applied associate-*l*13.4
Simplified13.4
Final simplification13.4
herbie shell --seed 2019164 +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)))