\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.418632866442672109740022575154699664032 \cdot 10^{-106} \lor \neg \left(\varepsilon \le 1.137895195985122466489334986457483016272 \cdot 10^{-80}\right):\\
\;\;\;\;\frac{1}{\frac{1 - \tan x \cdot \tan \varepsilon}{\tan x + \tan \varepsilon}} - \tan x\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right) + \varepsilon\\
\end{array}double f(double x, double eps) {
double r133612 = x;
double r133613 = eps;
double r133614 = r133612 + r133613;
double r133615 = tan(r133614);
double r133616 = tan(r133612);
double r133617 = r133615 - r133616;
return r133617;
}
double f(double x, double eps) {
double r133618 = eps;
double r133619 = -4.418632866442672e-106;
bool r133620 = r133618 <= r133619;
double r133621 = 1.1378951959851225e-80;
bool r133622 = r133618 <= r133621;
double r133623 = !r133622;
bool r133624 = r133620 || r133623;
double r133625 = 1.0;
double r133626 = x;
double r133627 = tan(r133626);
double r133628 = tan(r133618);
double r133629 = r133627 * r133628;
double r133630 = r133625 - r133629;
double r133631 = r133627 + r133628;
double r133632 = r133630 / r133631;
double r133633 = r133625 / r133632;
double r133634 = r133633 - r133627;
double r133635 = r133626 * r133618;
double r133636 = r133618 + r133626;
double r133637 = r133635 * r133636;
double r133638 = r133637 + r133618;
double r133639 = r133624 ? r133634 : r133638;
return r133639;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.5 |
|---|---|
| Target | 14.8 |
| Herbie | 15.3 |
if eps < -4.418632866442672e-106 or 1.1378951959851225e-80 < eps Initial program 30.2
rmApplied tan-sum7.2
rmApplied clear-num7.3
if -4.418632866442672e-106 < eps < 1.1378951959851225e-80Initial program 48.1
rmApplied tan-sum48.1
Taylor expanded around 0 30.5
Simplified30.3
Final simplification15.3
herbie shell --seed 2019362
(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)))