\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x}{\cos x}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\log \left(e^{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x}\right)}{\cos x}} - \frac{\sin x}{\cos x}\right)double f(double x, double eps) {
double r6996260 = x;
double r6996261 = eps;
double r6996262 = r6996260 + r6996261;
double r6996263 = tan(r6996262);
double r6996264 = tan(r6996260);
double r6996265 = r6996263 - r6996264;
return r6996265;
}
double f(double x, double eps) {
double r6996266 = eps;
double r6996267 = sin(r6996266);
double r6996268 = cos(r6996266);
double r6996269 = r6996267 / r6996268;
double r6996270 = 1.0;
double r6996271 = x;
double r6996272 = sin(r6996271);
double r6996273 = r6996269 * r6996272;
double r6996274 = cos(r6996271);
double r6996275 = r6996273 / r6996274;
double r6996276 = r6996270 - r6996275;
double r6996277 = r6996269 / r6996276;
double r6996278 = r6996272 / r6996274;
double r6996279 = exp(r6996273);
double r6996280 = log(r6996279);
double r6996281 = r6996280 / r6996274;
double r6996282 = r6996270 - r6996281;
double r6996283 = r6996278 / r6996282;
double r6996284 = r6996283 - r6996278;
double r6996285 = r6996277 + r6996284;
return r6996285;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.8 |
|---|---|
| Target | 15.1 |
| Herbie | 13.0 |
Initial program 36.8
rmApplied tan-sum21.7
Taylor expanded around inf 21.9
Simplified12.9
rmApplied add-log-exp13.0
Final simplification13.0
herbie shell --seed 2019172
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))