\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.0286038026990939 \cdot 10^{-16}:\\
\;\;\;\;\frac{\frac{\left(\tan x - \tan \varepsilon\right) \cdot \left(\tan \varepsilon + \tan x\right)}{\tan x - \tan \varepsilon}}{1 - \tan \varepsilon \cdot \tan x} - \tan x\\
\mathbf{elif}\;\varepsilon \le 2.4150728912939454 \cdot 10^{-72}:\\
\;\;\;\;\varepsilon + \left(\varepsilon + x\right) \cdot \left(x \cdot \varepsilon\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\tan \varepsilon + \tan x}{1 - \frac{\left(\sin \varepsilon \cdot \sin x\right) \cdot \left(\sin \varepsilon \cdot \tan x\right)}{\left(\cos x \cdot \cos \varepsilon\right) \cdot \cos \varepsilon}} + \left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan \varepsilon \cdot \tan x\right) \cdot \left(\tan \varepsilon \cdot \tan x\right)} \cdot \left(\tan \varepsilon \cdot \tan x\right) - \tan x\right)\\
\end{array}double f(double x, double eps) {
double r4479638 = x;
double r4479639 = eps;
double r4479640 = r4479638 + r4479639;
double r4479641 = tan(r4479640);
double r4479642 = tan(r4479638);
double r4479643 = r4479641 - r4479642;
return r4479643;
}
double f(double x, double eps) {
double r4479644 = eps;
double r4479645 = -2.0286038026990939e-16;
bool r4479646 = r4479644 <= r4479645;
double r4479647 = x;
double r4479648 = tan(r4479647);
double r4479649 = tan(r4479644);
double r4479650 = r4479648 - r4479649;
double r4479651 = r4479649 + r4479648;
double r4479652 = r4479650 * r4479651;
double r4479653 = r4479652 / r4479650;
double r4479654 = 1.0;
double r4479655 = r4479649 * r4479648;
double r4479656 = r4479654 - r4479655;
double r4479657 = r4479653 / r4479656;
double r4479658 = r4479657 - r4479648;
double r4479659 = 2.4150728912939454e-72;
bool r4479660 = r4479644 <= r4479659;
double r4479661 = r4479644 + r4479647;
double r4479662 = r4479647 * r4479644;
double r4479663 = r4479661 * r4479662;
double r4479664 = r4479644 + r4479663;
double r4479665 = sin(r4479644);
double r4479666 = sin(r4479647);
double r4479667 = r4479665 * r4479666;
double r4479668 = r4479665 * r4479648;
double r4479669 = r4479667 * r4479668;
double r4479670 = cos(r4479647);
double r4479671 = cos(r4479644);
double r4479672 = r4479670 * r4479671;
double r4479673 = r4479672 * r4479671;
double r4479674 = r4479669 / r4479673;
double r4479675 = r4479654 - r4479674;
double r4479676 = r4479651 / r4479675;
double r4479677 = r4479655 * r4479655;
double r4479678 = r4479654 - r4479677;
double r4479679 = r4479651 / r4479678;
double r4479680 = r4479679 * r4479655;
double r4479681 = r4479680 - r4479648;
double r4479682 = r4479676 + r4479681;
double r4479683 = r4479660 ? r4479664 : r4479682;
double r4479684 = r4479646 ? r4479658 : r4479683;
return r4479684;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.5 |
| Herbie | 15.1 |
if eps < -2.0286038026990939e-16Initial program 30.1
rmApplied tan-sum0.9
rmApplied flip-+1.0
Simplified0.9
if -2.0286038026990939e-16 < eps < 2.4150728912939454e-72Initial program 46.1
Taylor expanded around 0 31.1
Simplified31.1
if 2.4150728912939454e-72 < eps Initial program 30.2
rmApplied tan-sum5.5
rmApplied flip--5.6
Applied associate-/r/5.6
Simplified5.6
rmApplied distribute-rgt-in5.5
Applied associate--l+5.6
rmApplied tan-quot5.6
Applied associate-*r/5.6
Applied tan-quot5.6
Applied tan-quot5.6
Applied frac-times5.6
Applied frac-times5.6
Final simplification15.1
herbie shell --seed 2019163
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))