\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \left(\frac{{\left(\sin x\right)}^{2}}{\cos x} + \cos x\right)}{\cos x}}{1 - \tan x \cdot \tan \varepsilon}double f(double x, double eps) {
double r83310 = x;
double r83311 = eps;
double r83312 = r83310 + r83311;
double r83313 = tan(r83312);
double r83314 = tan(r83310);
double r83315 = r83313 - r83314;
return r83315;
}
double f(double x, double eps) {
double r83316 = eps;
double r83317 = sin(r83316);
double r83318 = cos(r83316);
double r83319 = r83317 / r83318;
double r83320 = x;
double r83321 = sin(r83320);
double r83322 = 2.0;
double r83323 = pow(r83321, r83322);
double r83324 = cos(r83320);
double r83325 = r83323 / r83324;
double r83326 = r83325 + r83324;
double r83327 = r83319 * r83326;
double r83328 = r83327 / r83324;
double r83329 = 1.0;
double r83330 = tan(r83320);
double r83331 = tan(r83316);
double r83332 = r83330 * r83331;
double r83333 = r83329 - r83332;
double r83334 = r83328 / r83333;
return r83334;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.0 |
|---|---|
| Target | 15.1 |
| Herbie | 0.4 |
Initial program 37.0
rmApplied tan-quot37.0
Applied tan-sum21.9
Applied frac-sub21.9
Taylor expanded around inf 0.4
rmApplied associate-/l*0.4
Final simplification0.4
herbie shell --seed 2019304
(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)))