\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.8376748158987993 \cdot 10^{-65}:\\
\;\;\;\;\frac{1}{\frac{1 - \tan x \cdot \tan \varepsilon}{\tan x + \tan \varepsilon}} - \tan x\\
\mathbf{elif}\;\varepsilon \le 1.05715375699266598 \cdot 10^{-28}:\\
\;\;\;\;x \cdot \left({\varepsilon}^{2} + x \cdot \varepsilon\right) + \varepsilon\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\tan x + \tan \varepsilon\right) \cdot \cos x - \sin x \cdot \left(1 - \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}\right)}{\cos x \cdot \left(1 - \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}\right)}\\
\end{array}double f(double x, double eps) {
double r61286 = x;
double r61287 = eps;
double r61288 = r61286 + r61287;
double r61289 = tan(r61288);
double r61290 = tan(r61286);
double r61291 = r61289 - r61290;
return r61291;
}
double f(double x, double eps) {
double r61292 = eps;
double r61293 = -2.8376748158987993e-65;
bool r61294 = r61292 <= r61293;
double r61295 = 1.0;
double r61296 = x;
double r61297 = tan(r61296);
double r61298 = tan(r61292);
double r61299 = r61297 * r61298;
double r61300 = r61295 - r61299;
double r61301 = r61297 + r61298;
double r61302 = r61300 / r61301;
double r61303 = r61295 / r61302;
double r61304 = r61303 - r61297;
double r61305 = 1.057153756992666e-28;
bool r61306 = r61292 <= r61305;
double r61307 = 2.0;
double r61308 = pow(r61292, r61307);
double r61309 = r61296 * r61292;
double r61310 = r61308 + r61309;
double r61311 = r61296 * r61310;
double r61312 = r61311 + r61292;
double r61313 = cos(r61296);
double r61314 = r61301 * r61313;
double r61315 = sin(r61296);
double r61316 = sin(r61292);
double r61317 = r61316 * r61297;
double r61318 = cos(r61292);
double r61319 = r61317 / r61318;
double r61320 = r61295 - r61319;
double r61321 = r61315 * r61320;
double r61322 = r61314 - r61321;
double r61323 = r61313 * r61320;
double r61324 = r61322 / r61323;
double r61325 = r61306 ? r61312 : r61324;
double r61326 = r61294 ? r61304 : r61325;
return r61326;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.0 |
|---|---|
| Target | 15.3 |
| Herbie | 15.3 |
if eps < -2.8376748158987993e-65Initial program 30.9
rmApplied tan-sum5.1
rmApplied clear-num5.2
if -2.8376748158987993e-65 < eps < 1.057153756992666e-28Initial program 46.1
rmApplied tan-sum46.1
rmApplied tan-quot46.1
Applied associate-*r/46.1
Simplified46.1
Taylor expanded around 0 31.2
Simplified30.9
if 1.057153756992666e-28 < eps Initial program 29.6
rmApplied tan-sum2.0
rmApplied tan-quot2.0
Applied associate-*r/2.1
Simplified2.1
rmApplied add-log-exp2.1
rmApplied tan-quot2.1
Applied frac-sub2.2
Simplified2.2
Simplified2.1
Final simplification15.3
herbie shell --seed 2019199
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))