\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le \frac{-5784497869627675}{79228162514264337593543950336}:\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)} \cdot 1 + \tan x \cdot \left(\tan \varepsilon \cdot \frac{\tan x + \tan \varepsilon}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)} - 1\right)\\
\mathbf{elif}\;\varepsilon \le \frac{5930776181004985}{21267647932558653966460912964485513216}:\\
\;\;\;\;x \cdot {\varepsilon}^{2} + \left(\varepsilon + {x}^{2} \cdot \varepsilon\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \sqrt[3]{{\left(\tan x \cdot \tan \varepsilon\right)}^{3}}} - \tan x\\
\end{array}double f(double x, double eps) {
double r104851 = x;
double r104852 = eps;
double r104853 = r104851 + r104852;
double r104854 = tan(r104853);
double r104855 = tan(r104851);
double r104856 = r104854 - r104855;
return r104856;
}
double f(double x, double eps) {
double r104857 = eps;
double r104858 = -5784497869627675.0;
double r104859 = 7.922816251426434e+28;
double r104860 = r104858 / r104859;
bool r104861 = r104857 <= r104860;
double r104862 = x;
double r104863 = tan(r104862);
double r104864 = tan(r104857);
double r104865 = r104863 + r104864;
double r104866 = 1.0;
double r104867 = r104863 * r104864;
double r104868 = r104867 * r104867;
double r104869 = r104866 - r104868;
double r104870 = r104865 / r104869;
double r104871 = r104870 * r104866;
double r104872 = r104864 * r104870;
double r104873 = r104872 - r104866;
double r104874 = r104863 * r104873;
double r104875 = r104871 + r104874;
double r104876 = 5930776181004985.0;
double r104877 = 2.1267647932558654e+37;
double r104878 = r104876 / r104877;
bool r104879 = r104857 <= r104878;
double r104880 = 2.0;
double r104881 = pow(r104857, r104880);
double r104882 = r104862 * r104881;
double r104883 = pow(r104862, r104880);
double r104884 = r104883 * r104857;
double r104885 = r104857 + r104884;
double r104886 = r104882 + r104885;
double r104887 = 3.0;
double r104888 = pow(r104867, r104887);
double r104889 = cbrt(r104888);
double r104890 = r104866 - r104889;
double r104891 = r104865 / r104890;
double r104892 = r104891 - r104863;
double r104893 = r104879 ? r104886 : r104892;
double r104894 = r104861 ? r104875 : r104893;
return r104894;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.8 |
|---|---|
| Target | 15.5 |
| Herbie | 15.9 |
if eps < -7.301062761093603e-14Initial program 31.7
rmApplied tan-sum0.8
rmApplied flip--0.8
Applied associate-/r/0.8
Simplified0.8
rmApplied distribute-lft-in0.8
Applied associate--l+0.8
Simplified0.9
if -7.301062761093603e-14 < eps < 2.788637558705096e-22Initial program 45.9
rmApplied tan-sum45.8
rmApplied flip--45.9
Applied associate-/r/45.9
Simplified45.9
Taylor expanded around 0 32.4
if 2.788637558705096e-22 < eps Initial program 29.5
rmApplied tan-sum1.3
rmApplied add-cbrt-cube1.4
Applied add-cbrt-cube1.4
Applied cbrt-unprod1.4
Simplified1.4
Final simplification15.9
herbie shell --seed 197574269
(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)))