\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.912746710277703 \cdot 10^{-18}:\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \left(\tan x \cdot \tan x\right) \cdot \left(\tan \varepsilon \cdot \tan \varepsilon\right)} + \left(\frac{\tan x + \tan \varepsilon}{1 - \left(\tan x \cdot \tan x\right) \cdot \left(\tan \varepsilon \cdot \tan \varepsilon\right)} \cdot \left(\tan x \cdot \tan \varepsilon\right) - \tan x\right)\\
\mathbf{elif}\;\varepsilon \le 5.153563226205793 \cdot 10^{-35}:\\
\;\;\;\;\left(\left(x \cdot \varepsilon\right) \cdot \varepsilon + \varepsilon\right) + \varepsilon \cdot \left(x \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\left(1 + \left(\tan x \cdot \tan \varepsilon + \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right)\right) \cdot \frac{\tan x + \tan \varepsilon}{1 - \left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)} - \tan x\\
\end{array}double f(double x, double eps) {
double r3337719 = x;
double r3337720 = eps;
double r3337721 = r3337719 + r3337720;
double r3337722 = tan(r3337721);
double r3337723 = tan(r3337719);
double r3337724 = r3337722 - r3337723;
return r3337724;
}
double f(double x, double eps) {
double r3337725 = eps;
double r3337726 = -8.912746710277703e-18;
bool r3337727 = r3337725 <= r3337726;
double r3337728 = x;
double r3337729 = tan(r3337728);
double r3337730 = tan(r3337725);
double r3337731 = r3337729 + r3337730;
double r3337732 = 1.0;
double r3337733 = r3337729 * r3337729;
double r3337734 = r3337730 * r3337730;
double r3337735 = r3337733 * r3337734;
double r3337736 = r3337732 - r3337735;
double r3337737 = r3337731 / r3337736;
double r3337738 = r3337729 * r3337730;
double r3337739 = r3337737 * r3337738;
double r3337740 = r3337739 - r3337729;
double r3337741 = r3337737 + r3337740;
double r3337742 = 5.153563226205793e-35;
bool r3337743 = r3337725 <= r3337742;
double r3337744 = r3337728 * r3337725;
double r3337745 = r3337744 * r3337725;
double r3337746 = r3337745 + r3337725;
double r3337747 = r3337728 * r3337728;
double r3337748 = r3337725 * r3337747;
double r3337749 = r3337746 + r3337748;
double r3337750 = r3337738 * r3337738;
double r3337751 = r3337738 + r3337750;
double r3337752 = r3337732 + r3337751;
double r3337753 = r3337750 * r3337738;
double r3337754 = r3337732 - r3337753;
double r3337755 = r3337731 / r3337754;
double r3337756 = r3337752 * r3337755;
double r3337757 = r3337756 - r3337729;
double r3337758 = r3337743 ? r3337749 : r3337757;
double r3337759 = r3337727 ? r3337741 : r3337758;
return r3337759;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.3 |
|---|---|
| Target | 14.9 |
| Herbie | 15.5 |
if eps < -8.912746710277703e-18Initial program 29.8
rmApplied tan-sum0.8
rmApplied flip--0.9
Applied associate-/r/0.8
rmApplied swap-sqr0.9
rmApplied distribute-rgt-in0.8
Applied associate--l+0.9
if -8.912746710277703e-18 < eps < 5.153563226205793e-35Initial program 45.6
rmApplied tan-sum45.6
rmApplied flip--45.6
Applied associate-/r/45.6
rmApplied swap-sqr45.6
Taylor expanded around 0 30.8
Simplified30.8
if 5.153563226205793e-35 < eps Initial program 30.2
rmApplied tan-sum3.0
rmApplied flip3--3.0
Applied associate-/r/3.0
Simplified3.0
Final simplification15.5
herbie shell --seed 2019142
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))