\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon \cdot \cos x}{\cos \varepsilon} + \left({\left(\sin x\right)}^{2} \cdot \sin \varepsilon\right) \cdot \frac{1}{\cos x \cdot \cos \varepsilon}}{\left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \cos x}double f(double x, double eps) {
double r95222 = x;
double r95223 = eps;
double r95224 = r95222 + r95223;
double r95225 = tan(r95224);
double r95226 = tan(r95222);
double r95227 = r95225 - r95226;
return r95227;
}
double f(double x, double eps) {
double r95228 = eps;
double r95229 = sin(r95228);
double r95230 = x;
double r95231 = cos(r95230);
double r95232 = r95229 * r95231;
double r95233 = cos(r95228);
double r95234 = r95232 / r95233;
double r95235 = sin(r95230);
double r95236 = 2.0;
double r95237 = pow(r95235, r95236);
double r95238 = r95237 * r95229;
double r95239 = 1.0;
double r95240 = r95231 * r95233;
double r95241 = r95239 / r95240;
double r95242 = r95238 * r95241;
double r95243 = r95234 + r95242;
double r95244 = tan(r95230);
double r95245 = tan(r95228);
double r95246 = r95244 * r95245;
double r95247 = r95239 - r95246;
double r95248 = r95247 * r95231;
double r95249 = r95243 / r95248;
return r95249;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.4 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
Initial program 36.4
rmApplied tan-quot36.4
Applied tan-sum21.3
Applied frac-sub21.4
Taylor expanded around inf 0.4
rmApplied div-inv0.4
Final simplification0.4
herbie shell --seed 2020034
(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)))