\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.6784667043225302 \cdot 10^{-32}:\\
\;\;\;\;\frac{\left(\left(\tan x + \tan \varepsilon\right) \cdot \left(1 + \tan x \cdot \tan \varepsilon\right)\right) \cdot \cos x - \left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \sin x}{\left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \cos x}\\
\mathbf{elif}\;\varepsilon \le 1.04782928541883701 \cdot 10^{-23}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right) + \varepsilon\\
\mathbf{else}:\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \frac{{\left(\sin x\right)}^{2} \cdot {\left(\sin \varepsilon\right)}^{2}}{{\left(\cos \varepsilon\right)}^{2} \cdot {\left(\cos x\right)}^{2}}} \cdot \left(1 + \tan x \cdot \tan \varepsilon\right) - \tan x\\
\end{array}double f(double x, double eps) {
double r103812 = x;
double r103813 = eps;
double r103814 = r103812 + r103813;
double r103815 = tan(r103814);
double r103816 = tan(r103812);
double r103817 = r103815 - r103816;
return r103817;
}
double f(double x, double eps) {
double r103818 = eps;
double r103819 = -4.67846670432253e-32;
bool r103820 = r103818 <= r103819;
double r103821 = x;
double r103822 = tan(r103821);
double r103823 = tan(r103818);
double r103824 = r103822 + r103823;
double r103825 = 1.0;
double r103826 = r103822 * r103823;
double r103827 = r103825 + r103826;
double r103828 = r103824 * r103827;
double r103829 = cos(r103821);
double r103830 = r103828 * r103829;
double r103831 = r103826 * r103826;
double r103832 = r103825 - r103831;
double r103833 = sin(r103821);
double r103834 = r103832 * r103833;
double r103835 = r103830 - r103834;
double r103836 = r103832 * r103829;
double r103837 = r103835 / r103836;
double r103838 = 1.047829285418837e-23;
bool r103839 = r103818 <= r103838;
double r103840 = r103821 * r103818;
double r103841 = r103818 + r103821;
double r103842 = r103840 * r103841;
double r103843 = r103842 + r103818;
double r103844 = 2.0;
double r103845 = pow(r103833, r103844);
double r103846 = sin(r103818);
double r103847 = pow(r103846, r103844);
double r103848 = r103845 * r103847;
double r103849 = cos(r103818);
double r103850 = pow(r103849, r103844);
double r103851 = pow(r103829, r103844);
double r103852 = r103850 * r103851;
double r103853 = r103848 / r103852;
double r103854 = r103825 - r103853;
double r103855 = r103824 / r103854;
double r103856 = r103855 * r103827;
double r103857 = r103856 - r103822;
double r103858 = r103839 ? r103843 : r103857;
double r103859 = r103820 ? r103837 : r103858;
return r103859;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.6 |
|---|---|
| Target | 15.4 |
| Herbie | 15.7 |
if eps < -4.67846670432253e-32Initial program 31.0
rmApplied tan-sum2.8
rmApplied flip--2.8
Applied associate-/r/2.8
Simplified2.8
rmApplied tan-quot2.9
Applied associate-*l/2.9
Applied frac-sub2.9
if -4.67846670432253e-32 < eps < 1.047829285418837e-23Initial program 46.1
rmApplied tan-sum46.1
Taylor expanded around 0 32.3
Simplified32.0
if 1.047829285418837e-23 < eps Initial program 30.1
rmApplied tan-sum1.6
rmApplied flip--1.6
Applied associate-/r/1.6
Simplified1.6
Taylor expanded around inf 1.7
Final simplification15.7
herbie shell --seed 2020025
(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)))