\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon \cdot \cos x}{\cos \varepsilon} + \frac{{\left(\sin x\right)}^{2} \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \cos x}double f(double x, double eps) {
double r136311 = x;
double r136312 = eps;
double r136313 = r136311 + r136312;
double r136314 = tan(r136313);
double r136315 = tan(r136311);
double r136316 = r136314 - r136315;
return r136316;
}
double f(double x, double eps) {
double r136317 = eps;
double r136318 = sin(r136317);
double r136319 = x;
double r136320 = cos(r136319);
double r136321 = r136318 * r136320;
double r136322 = cos(r136317);
double r136323 = r136321 / r136322;
double r136324 = sin(r136319);
double r136325 = 2.0;
double r136326 = pow(r136324, r136325);
double r136327 = r136326 * r136318;
double r136328 = r136320 * r136322;
double r136329 = r136327 / r136328;
double r136330 = r136323 + r136329;
double r136331 = 1.0;
double r136332 = r136324 * r136318;
double r136333 = r136332 / r136328;
double r136334 = r136331 - r136333;
double r136335 = r136334 * r136320;
double r136336 = r136330 / r136335;
return r136336;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.2 |
|---|---|
| Target | 15.3 |
| Herbie | 0.4 |
Initial program 37.2
rmApplied tan-sum21.8
Taylor expanded around inf 21.8
rmApplied tan-quot21.9
Applied frac-sub21.9
Simplified21.9
Taylor expanded around inf 0.4
Final simplification0.4
herbie shell --seed 2020049
(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)))