\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.522641810987648235580681026368571553727 \cdot 10^{-98}:\\
\;\;\;\;\frac{1 \cdot \cos x - \frac{1 - \tan x \cdot \tan \varepsilon}{\tan x + \tan \varepsilon} \cdot \sin x}{\frac{1 - \tan x \cdot \tan \varepsilon}{\tan x + \tan \varepsilon} \cdot \cos x}\\
\mathbf{elif}\;\varepsilon \le 6.436474923212402395515194209472351994748 \cdot 10^{-27}:\\
\;\;\;\;x \cdot {\varepsilon}^{2} + \left(\varepsilon + {x}^{2} \cdot \varepsilon\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{{\left(\tan x\right)}^{3} + {\left(\tan \varepsilon\right)}^{3}}{\tan \varepsilon \cdot \left(\tan \varepsilon - \tan x\right) + \tan x \cdot \tan x}}{1 - \tan x \cdot \tan \varepsilon} - \tan x\\
\end{array}double f(double x, double eps) {
double r94909 = x;
double r94910 = eps;
double r94911 = r94909 + r94910;
double r94912 = tan(r94911);
double r94913 = tan(r94909);
double r94914 = r94912 - r94913;
return r94914;
}
double f(double x, double eps) {
double r94915 = eps;
double r94916 = -1.5226418109876482e-98;
bool r94917 = r94915 <= r94916;
double r94918 = 1.0;
double r94919 = x;
double r94920 = cos(r94919);
double r94921 = r94918 * r94920;
double r94922 = tan(r94919);
double r94923 = tan(r94915);
double r94924 = r94922 * r94923;
double r94925 = r94918 - r94924;
double r94926 = r94922 + r94923;
double r94927 = r94925 / r94926;
double r94928 = sin(r94919);
double r94929 = r94927 * r94928;
double r94930 = r94921 - r94929;
double r94931 = r94927 * r94920;
double r94932 = r94930 / r94931;
double r94933 = 6.4364749232124024e-27;
bool r94934 = r94915 <= r94933;
double r94935 = 2.0;
double r94936 = pow(r94915, r94935);
double r94937 = r94919 * r94936;
double r94938 = pow(r94919, r94935);
double r94939 = r94938 * r94915;
double r94940 = r94915 + r94939;
double r94941 = r94937 + r94940;
double r94942 = 3.0;
double r94943 = pow(r94922, r94942);
double r94944 = pow(r94923, r94942);
double r94945 = r94943 + r94944;
double r94946 = r94923 - r94922;
double r94947 = r94923 * r94946;
double r94948 = r94922 * r94922;
double r94949 = r94947 + r94948;
double r94950 = r94945 / r94949;
double r94951 = r94950 / r94925;
double r94952 = r94951 - r94922;
double r94953 = r94934 ? r94941 : r94952;
double r94954 = r94917 ? r94932 : r94953;
return r94954;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 14.7 |
| Herbie | 16.0 |
if eps < -1.5226418109876482e-98Initial program 30.9
rmApplied tan-sum7.9
rmApplied clear-num8.0
rmApplied tan-quot8.0
Applied frac-sub8.0
if -1.5226418109876482e-98 < eps < 6.4364749232124024e-27Initial program 47.1
rmApplied tan-sum47.1
Taylor expanded around inf 47.1
Taylor expanded around 0 31.3
if 6.4364749232124024e-27 < eps Initial program 29.5
rmApplied tan-sum2.0
rmApplied flip3-+2.2
Simplified2.2
Final simplification16.0
herbie shell --seed 2019346
(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)))