\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.29565067036897 \cdot 10^{-18}:\\
\;\;\;\;\frac{\tan \varepsilon + \tan x}{\log \left(e^{1 - \tan x \cdot \tan \varepsilon}\right)} - \tan x\\
\mathbf{elif}\;\varepsilon \le 3.143523747535153 \cdot 10^{-69}:\\
\;\;\;\;x \cdot \left(\varepsilon \cdot \left(x + \varepsilon\right)\right) + \varepsilon\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\tan \varepsilon + \tan x\right) \cdot \cos x - \sin x \cdot \left(1 - \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}\right)}{\left(1 - \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}\right) \cdot \cos x}\\
\end{array}double f(double x, double eps) {
double r3333317 = x;
double r3333318 = eps;
double r3333319 = r3333317 + r3333318;
double r3333320 = tan(r3333319);
double r3333321 = tan(r3333317);
double r3333322 = r3333320 - r3333321;
return r3333322;
}
double f(double x, double eps) {
double r3333323 = eps;
double r3333324 = -8.29565067036897e-18;
bool r3333325 = r3333323 <= r3333324;
double r3333326 = tan(r3333323);
double r3333327 = x;
double r3333328 = tan(r3333327);
double r3333329 = r3333326 + r3333328;
double r3333330 = 1.0;
double r3333331 = r3333328 * r3333326;
double r3333332 = r3333330 - r3333331;
double r3333333 = exp(r3333332);
double r3333334 = log(r3333333);
double r3333335 = r3333329 / r3333334;
double r3333336 = r3333335 - r3333328;
double r3333337 = 3.143523747535153e-69;
bool r3333338 = r3333323 <= r3333337;
double r3333339 = r3333327 + r3333323;
double r3333340 = r3333323 * r3333339;
double r3333341 = r3333327 * r3333340;
double r3333342 = r3333341 + r3333323;
double r3333343 = cos(r3333327);
double r3333344 = r3333329 * r3333343;
double r3333345 = sin(r3333327);
double r3333346 = sin(r3333323);
double r3333347 = r3333328 * r3333346;
double r3333348 = cos(r3333323);
double r3333349 = r3333347 / r3333348;
double r3333350 = r3333330 - r3333349;
double r3333351 = r3333345 * r3333350;
double r3333352 = r3333344 - r3333351;
double r3333353 = r3333350 * r3333343;
double r3333354 = r3333352 / r3333353;
double r3333355 = r3333338 ? r3333342 : r3333354;
double r3333356 = r3333325 ? r3333336 : r3333355;
return r3333356;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.4 |
|---|---|
| Target | 15.3 |
| Herbie | 15.4 |
if eps < -8.29565067036897e-18Initial program 30.3
rmApplied tan-sum0.9
rmApplied add-log-exp1.0
Applied add-log-exp1.0
Applied diff-log1.0
Simplified1.0
if -8.29565067036897e-18 < eps < 3.143523747535153e-69Initial program 46.7
Taylor expanded around 0 31.2
Simplified31.1
if 3.143523747535153e-69 < eps Initial program 30.5
rmApplied tan-sum5.9
rmApplied tan-quot5.9
Applied associate-*r/5.9
rmApplied tan-quot5.9
Applied frac-sub5.9
Final simplification15.4
herbie shell --seed 2019139
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))