\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.4068122803532358 \cdot 10^{-83}:\\
\;\;\;\;\frac{1}{\frac{{1}^{3} - \sqrt[3]{{\left({\left(\tan \varepsilon \cdot \tan x\right)}^{3}\right)}^{3}}}{\left(\tan \varepsilon + \tan x\right) \cdot \left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(1 + \tan \varepsilon \cdot \tan x\right) + 1\right)}} - \tan x\\
\mathbf{elif}\;\varepsilon \le 7.31428479444576345 \cdot 10^{-19}:\\
\;\;\;\;x \cdot {\varepsilon}^{2} + \left(\frac{1}{3} \cdot {\varepsilon}^{3} + \varepsilon\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\tan x + \tan \varepsilon\right) \cdot \cos x - \left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \sin x}{\left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \cos x}\\
\end{array}double f(double x, double eps) {
double r126993 = x;
double r126994 = eps;
double r126995 = r126993 + r126994;
double r126996 = tan(r126995);
double r126997 = tan(r126993);
double r126998 = r126996 - r126997;
return r126998;
}
double f(double x, double eps) {
double r126999 = eps;
double r127000 = -1.4068122803532358e-83;
bool r127001 = r126999 <= r127000;
double r127002 = 1.0;
double r127003 = 3.0;
double r127004 = pow(r127002, r127003);
double r127005 = tan(r126999);
double r127006 = x;
double r127007 = tan(r127006);
double r127008 = r127005 * r127007;
double r127009 = pow(r127008, r127003);
double r127010 = pow(r127009, r127003);
double r127011 = cbrt(r127010);
double r127012 = r127004 - r127011;
double r127013 = r127005 + r127007;
double r127014 = r127007 * r127005;
double r127015 = r127002 + r127008;
double r127016 = r127014 * r127015;
double r127017 = r127016 + r127002;
double r127018 = r127013 * r127017;
double r127019 = r127012 / r127018;
double r127020 = r127002 / r127019;
double r127021 = r127020 - r127007;
double r127022 = 7.314284794445763e-19;
bool r127023 = r126999 <= r127022;
double r127024 = 2.0;
double r127025 = pow(r126999, r127024);
double r127026 = r127006 * r127025;
double r127027 = 0.3333333333333333;
double r127028 = pow(r126999, r127003);
double r127029 = r127027 * r127028;
double r127030 = r127029 + r126999;
double r127031 = r127026 + r127030;
double r127032 = r127007 + r127005;
double r127033 = cos(r127006);
double r127034 = r127032 * r127033;
double r127035 = r127002 - r127014;
double r127036 = sin(r127006);
double r127037 = r127035 * r127036;
double r127038 = r127034 - r127037;
double r127039 = r127035 * r127033;
double r127040 = r127038 / r127039;
double r127041 = r127023 ? r127031 : r127040;
double r127042 = r127001 ? r127021 : r127041;
return r127042;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.1 |
| Herbie | 14.1 |
if eps < -1.4068122803532358e-83Initial program 30.8
rmApplied tan-sum6.6
Simplified6.6
rmApplied clear-num6.7
Simplified6.7
rmApplied flip3--6.7
Applied associate-/l/6.7
Simplified6.7
rmApplied add-cbrt-cube6.7
Simplified6.7
if -1.4068122803532358e-83 < eps < 7.314284794445763e-19Initial program 45.8
rmApplied tan-sum45.8
Simplified45.8
rmApplied clear-num46.0
Simplified46.0
rmApplied flip3--46.0
Applied associate-/l/46.0
Simplified46.0
Taylor expanded around 0 27.5
if 7.314284794445763e-19 < eps Initial program 30.6
rmApplied tan-quot30.4
Applied tan-sum1.3
Applied frac-sub1.3
Final simplification14.1
herbie shell --seed 2020046
(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)))