\tan \left(x + \varepsilon\right) - \tan x
\left(\frac{\frac{\sin x}{\cos x}}{1 - \left(\frac{\sin \varepsilon}{\cos x} \cdot \sin x\right) \cdot \frac{1}{\cos \varepsilon}} - \frac{\sin x}{\cos x}\right) + \frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \log \left(e^{\frac{\sin x}{\cos \varepsilon} \cdot \frac{\sin \varepsilon}{\cos x}}\right)}double f(double x, double eps) {
double r3788405 = x;
double r3788406 = eps;
double r3788407 = r3788405 + r3788406;
double r3788408 = tan(r3788407);
double r3788409 = tan(r3788405);
double r3788410 = r3788408 - r3788409;
return r3788410;
}
double f(double x, double eps) {
double r3788411 = x;
double r3788412 = sin(r3788411);
double r3788413 = cos(r3788411);
double r3788414 = r3788412 / r3788413;
double r3788415 = 1.0;
double r3788416 = eps;
double r3788417 = sin(r3788416);
double r3788418 = r3788417 / r3788413;
double r3788419 = r3788418 * r3788412;
double r3788420 = cos(r3788416);
double r3788421 = r3788415 / r3788420;
double r3788422 = r3788419 * r3788421;
double r3788423 = r3788415 - r3788422;
double r3788424 = r3788414 / r3788423;
double r3788425 = r3788424 - r3788414;
double r3788426 = r3788417 / r3788420;
double r3788427 = r3788412 / r3788420;
double r3788428 = r3788427 * r3788418;
double r3788429 = exp(r3788428);
double r3788430 = log(r3788429);
double r3788431 = r3788415 - r3788430;
double r3788432 = r3788426 / r3788431;
double r3788433 = r3788425 + r3788432;
return r3788433;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.3 |
| Herbie | 13.0 |
Initial program 36.9
rmApplied tan-sum21.5
Taylor expanded around inf 21.6
Simplified13.0
rmApplied div-inv13.0
Applied associate-*r*13.0
rmApplied add-log-exp13.0
Final simplification13.0
herbie shell --seed 2019174
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))