\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -6.03166186485173 \cdot 10^{-09}:\\
\;\;\;\;\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}\right), \left(\tan x \cdot \tan \varepsilon + 1\right), \left(-\tan x\right)\right)\\
\mathbf{elif}\;\varepsilon \le 1.1518020933864138 \cdot 10^{-08}:\\
\;\;\;\;\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}\right), \left(\tan x \cdot \tan \varepsilon\right), \left(\mathsf{fma}\left(\frac{2}{15}, \left({\varepsilon}^{5}\right), \left(\mathsf{fma}\left(\left(\varepsilon \cdot \varepsilon\right), \left(\varepsilon \cdot \frac{1}{3}\right), \varepsilon\right)\right)\right)\right)\right) + \left(\tan x - \tan x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right)}\right), \left(\left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right) + \tan x \cdot \tan \varepsilon\right) + 1\right), \left(-\tan x\right)\right)\\
\end{array}double f(double x, double eps) {
double r13518007 = x;
double r13518008 = eps;
double r13518009 = r13518007 + r13518008;
double r13518010 = tan(r13518009);
double r13518011 = tan(r13518007);
double r13518012 = r13518010 - r13518011;
return r13518012;
}
double f(double x, double eps) {
double r13518013 = eps;
double r13518014 = -6.03166186485173e-09;
bool r13518015 = r13518013 <= r13518014;
double r13518016 = tan(r13518013);
double r13518017 = x;
double r13518018 = tan(r13518017);
double r13518019 = r13518016 + r13518018;
double r13518020 = 1.0;
double r13518021 = r13518018 * r13518016;
double r13518022 = r13518021 * r13518021;
double r13518023 = r13518020 - r13518022;
double r13518024 = r13518019 / r13518023;
double r13518025 = r13518021 + r13518020;
double r13518026 = -r13518018;
double r13518027 = fma(r13518024, r13518025, r13518026);
double r13518028 = 1.1518020933864138e-08;
bool r13518029 = r13518013 <= r13518028;
double r13518030 = 0.13333333333333333;
double r13518031 = 5.0;
double r13518032 = pow(r13518013, r13518031);
double r13518033 = r13518013 * r13518013;
double r13518034 = 0.3333333333333333;
double r13518035 = r13518013 * r13518034;
double r13518036 = fma(r13518033, r13518035, r13518013);
double r13518037 = fma(r13518030, r13518032, r13518036);
double r13518038 = fma(r13518024, r13518021, r13518037);
double r13518039 = r13518018 - r13518018;
double r13518040 = r13518038 + r13518039;
double r13518041 = r13518021 * r13518022;
double r13518042 = r13518020 - r13518041;
double r13518043 = r13518019 / r13518042;
double r13518044 = r13518022 + r13518021;
double r13518045 = r13518044 + r13518020;
double r13518046 = fma(r13518043, r13518045, r13518026);
double r13518047 = r13518029 ? r13518040 : r13518046;
double r13518048 = r13518015 ? r13518027 : r13518047;
return r13518048;
}




Bits error versus x




Bits error versus eps
| Original | 37.0 |
|---|---|
| Target | 15.5 |
| Herbie | 0.4 |
if eps < -6.03166186485173e-09Initial program 29.7
rmApplied tan-sum0.5
rmApplied flip--0.5
Applied associate-/r/0.5
Applied fma-neg0.5
if -6.03166186485173e-09 < eps < 1.1518020933864138e-08Initial program 44.7
rmApplied tan-sum44.4
rmApplied *-un-lft-identity44.4
Applied flip--44.4
Applied associate-/r/44.4
Applied prod-diff44.4
Simplified39.8
Simplified39.8
Taylor expanded around 0 0.3
Simplified0.3
if 1.1518020933864138e-08 < eps Initial program 30.2
rmApplied tan-sum0.5
rmApplied flip3--0.5
Applied associate-/r/0.5
Applied fma-neg0.5
Simplified0.5
Final simplification0.4
herbie shell --seed 2019124 +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)))