\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -5.421325500005225 \cdot 10^{-61}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\tan \varepsilon + \tan x}{1 - \frac{\left(\tan \varepsilon \cdot \sin x\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}{\cos x}}, \tan x \cdot \tan \varepsilon + 1, -\tan x\right)\\
\mathbf{elif}\;\varepsilon \le 5.810306508670788 \cdot 10^{-52}:\\
\;\;\;\;\mathsf{fma}\left(x \cdot \varepsilon, x + \varepsilon, \varepsilon\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\tan \varepsilon + \tan x, \frac{1}{1 - \tan x \cdot \tan \varepsilon}, -\tan x\right)\\
\end{array}double f(double x, double eps) {
double r2720263 = x;
double r2720264 = eps;
double r2720265 = r2720263 + r2720264;
double r2720266 = tan(r2720265);
double r2720267 = tan(r2720263);
double r2720268 = r2720266 - r2720267;
return r2720268;
}
double f(double x, double eps) {
double r2720269 = eps;
double r2720270 = -5.421325500005225e-61;
bool r2720271 = r2720269 <= r2720270;
double r2720272 = tan(r2720269);
double r2720273 = x;
double r2720274 = tan(r2720273);
double r2720275 = r2720272 + r2720274;
double r2720276 = 1.0;
double r2720277 = sin(r2720273);
double r2720278 = r2720272 * r2720277;
double r2720279 = r2720274 * r2720272;
double r2720280 = r2720278 * r2720279;
double r2720281 = cos(r2720273);
double r2720282 = r2720280 / r2720281;
double r2720283 = r2720276 - r2720282;
double r2720284 = r2720275 / r2720283;
double r2720285 = r2720279 + r2720276;
double r2720286 = -r2720274;
double r2720287 = fma(r2720284, r2720285, r2720286);
double r2720288 = 5.810306508670788e-52;
bool r2720289 = r2720269 <= r2720288;
double r2720290 = r2720273 * r2720269;
double r2720291 = r2720273 + r2720269;
double r2720292 = fma(r2720290, r2720291, r2720269);
double r2720293 = r2720276 - r2720279;
double r2720294 = r2720276 / r2720293;
double r2720295 = fma(r2720275, r2720294, r2720286);
double r2720296 = r2720289 ? r2720292 : r2720295;
double r2720297 = r2720271 ? r2720287 : r2720296;
return r2720297;
}




Bits error versus x




Bits error versus eps
| Original | 36.7 |
|---|---|
| Target | 14.9 |
| Herbie | 15.5 |
if eps < -5.421325500005225e-61Initial program 30.4
rmApplied tan-sum5.1
rmApplied flip--5.2
Applied associate-/r/5.2
Applied fma-neg5.2
rmApplied tan-quot5.2
Applied associate-*l/5.2
Applied associate-*r/5.2
if -5.421325500005225e-61 < eps < 5.810306508670788e-52Initial program 47.0
Taylor expanded around 0 31.6
Simplified31.6
if 5.810306508670788e-52 < eps Initial program 29.1
rmApplied tan-sum3.8
rmApplied div-inv3.8
Applied fma-neg3.8
Final simplification15.5
herbie shell --seed 2019168 +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)))