\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin x}{\cos x}} + \frac{\frac{\left(\sin x \cdot \frac{\sin x}{\frac{\cos \varepsilon \cdot \cos x}{\sin \varepsilon}}\right) \cdot \left(\left(1 + \left(1 - \frac{\sin x}{\frac{\cos \varepsilon \cdot \cos x}{\sin \varepsilon}}\right)\right) \cdot \sin x\right)}{\left(1 + \left(1 - \frac{\sin x}{\frac{\cos \varepsilon \cdot \cos x}{\sin \varepsilon}}\right)\right) \cdot \sin x}}{\cos x \cdot \left(1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin x}{\cos x}\right)}double f(double x, double eps) {
double r87486 = x;
double r87487 = eps;
double r87488 = r87486 + r87487;
double r87489 = tan(r87488);
double r87490 = tan(r87486);
double r87491 = r87489 - r87490;
return r87491;
}
double f(double x, double eps) {
double r87492 = eps;
double r87493 = sin(r87492);
double r87494 = cos(r87492);
double r87495 = r87493 / r87494;
double r87496 = 1.0;
double r87497 = x;
double r87498 = sin(r87497);
double r87499 = cos(r87497);
double r87500 = r87498 / r87499;
double r87501 = r87495 * r87500;
double r87502 = r87496 - r87501;
double r87503 = r87495 / r87502;
double r87504 = r87494 * r87499;
double r87505 = r87504 / r87493;
double r87506 = r87498 / r87505;
double r87507 = r87498 * r87506;
double r87508 = r87496 - r87506;
double r87509 = r87496 + r87508;
double r87510 = r87509 * r87498;
double r87511 = r87507 * r87510;
double r87512 = r87511 / r87510;
double r87513 = r87499 * r87502;
double r87514 = r87512 / r87513;
double r87515 = r87503 + r87514;
return r87515;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.7 |
|---|---|
| Target | 14.9 |
| Herbie | 0.4 |
Initial program 36.7
Simplified36.7
rmApplied tan-sum21.7
Simplified21.7
Taylor expanded around inf 21.8
Simplified12.7
rmApplied frac-sub13.0
Simplified12.8
Simplified12.8
rmApplied flip--12.8
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019195
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))