\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -7.812094276090538 \cdot 10^{-18}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \left(\tan x \cdot \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}\right)}, 1 + \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}, -\tan x\right)\\
\mathbf{elif}\;\varepsilon \le 4.367505480077063 \cdot 10^{-68}:\\
\;\;\;\;\mathsf{fma}\left(x, \varepsilon \cdot \left(x + \varepsilon\right), \varepsilon\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \left(\tan x \cdot \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}\right)}, 1 + \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}, -\tan x\right)\\
\end{array}double f(double x, double eps) {
double r3163959 = x;
double r3163960 = eps;
double r3163961 = r3163959 + r3163960;
double r3163962 = tan(r3163961);
double r3163963 = tan(r3163959);
double r3163964 = r3163962 - r3163963;
return r3163964;
}
double f(double x, double eps) {
double r3163965 = eps;
double r3163966 = -7.812094276090538e-18;
bool r3163967 = r3163965 <= r3163966;
double r3163968 = x;
double r3163969 = tan(r3163968);
double r3163970 = tan(r3163965);
double r3163971 = r3163969 + r3163970;
double r3163972 = 1.0;
double r3163973 = sin(r3163965);
double r3163974 = cos(r3163965);
double r3163975 = r3163973 / r3163974;
double r3163976 = r3163973 * r3163969;
double r3163977 = r3163976 / r3163974;
double r3163978 = r3163969 * r3163977;
double r3163979 = r3163975 * r3163978;
double r3163980 = r3163972 - r3163979;
double r3163981 = r3163971 / r3163980;
double r3163982 = r3163972 + r3163977;
double r3163983 = -r3163969;
double r3163984 = fma(r3163981, r3163982, r3163983);
double r3163985 = 4.367505480077063e-68;
bool r3163986 = r3163965 <= r3163985;
double r3163987 = r3163968 + r3163965;
double r3163988 = r3163965 * r3163987;
double r3163989 = fma(r3163968, r3163988, r3163965);
double r3163990 = r3163986 ? r3163989 : r3163984;
double r3163991 = r3163967 ? r3163984 : r3163990;
return r3163991;
}




Bits error versus x




Bits error versus eps
| Original | 37.4 |
|---|---|
| Target | 15.3 |
| Herbie | 15.4 |
if eps < -7.812094276090538e-18 or 4.367505480077063e-68 < eps Initial program 30.4
rmApplied tan-sum3.5
rmApplied tan-quot3.5
Applied associate-*r/3.5
rmApplied flip--3.5
Applied associate-/r/3.5
Applied fma-neg3.5
rmApplied *-un-lft-identity3.5
Applied times-frac3.5
Applied associate-*r*3.5
if -7.812094276090538e-18 < eps < 4.367505480077063e-68Initial program 46.6
Taylor expanded around 0 31.1
Simplified31.1
Final simplification15.4
herbie shell --seed 2019139 +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)))