\tan \left(x + \varepsilon\right) - \tan x
\left(1 + \left(\frac{\frac{\sin \varepsilon}{\cos x} \cdot \sin x}{\cos \varepsilon} + \frac{\frac{\sin \varepsilon}{\cos x} \cdot \sin x}{\cos \varepsilon} \cdot \frac{\frac{\sin \varepsilon}{\cos x} \cdot \sin x}{\cos \varepsilon}\right)\right) \cdot \frac{\frac{\sin \varepsilon}{1 - \frac{\sqrt[3]{\left(\left(\frac{\sin \varepsilon}{\cos x} \cdot \sin x\right) \cdot \left(\frac{\sin \varepsilon}{\cos x} \cdot \sin x\right)\right) \cdot \left(\frac{\sin \varepsilon}{\cos x} \cdot \sin x\right)}}{\cos \varepsilon} \cdot \left(\frac{\frac{\sin \varepsilon}{\cos x} \cdot \sin x}{\cos \varepsilon} \cdot \frac{\frac{\sin \varepsilon}{\cos x} \cdot \sin x}{\cos \varepsilon}\right)}}{\cos \varepsilon} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\frac{\sin \varepsilon}{\cos x} \cdot \sin x}{\cos \varepsilon}} - \frac{\sin x}{\cos x}\right)double f(double x, double eps) {
double r6025901 = x;
double r6025902 = eps;
double r6025903 = r6025901 + r6025902;
double r6025904 = tan(r6025903);
double r6025905 = tan(r6025901);
double r6025906 = r6025904 - r6025905;
return r6025906;
}
double f(double x, double eps) {
double r6025907 = 1.0;
double r6025908 = eps;
double r6025909 = sin(r6025908);
double r6025910 = x;
double r6025911 = cos(r6025910);
double r6025912 = r6025909 / r6025911;
double r6025913 = sin(r6025910);
double r6025914 = r6025912 * r6025913;
double r6025915 = cos(r6025908);
double r6025916 = r6025914 / r6025915;
double r6025917 = r6025916 * r6025916;
double r6025918 = r6025916 + r6025917;
double r6025919 = r6025907 + r6025918;
double r6025920 = r6025914 * r6025914;
double r6025921 = r6025920 * r6025914;
double r6025922 = cbrt(r6025921);
double r6025923 = r6025922 / r6025915;
double r6025924 = r6025923 * r6025917;
double r6025925 = r6025907 - r6025924;
double r6025926 = r6025909 / r6025925;
double r6025927 = r6025926 / r6025915;
double r6025928 = r6025919 * r6025927;
double r6025929 = r6025913 / r6025911;
double r6025930 = r6025907 - r6025916;
double r6025931 = r6025929 / r6025930;
double r6025932 = r6025931 - r6025929;
double r6025933 = r6025928 + r6025932;
return r6025933;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.5 |
| Herbie | 12.8 |
Initial program 36.9
rmApplied tan-sum21.4
Taylor expanded around inf 21.5
Simplified12.7
rmApplied flip3--12.8
Applied associate-*l/12.8
Applied associate-/r/12.8
Simplified12.8
rmApplied add-cbrt-cube12.8
Final simplification12.8
herbie shell --seed 2019163 +o rules:numerics
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))