\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.1089423986131282 \cdot 10^{-63}:\\
\;\;\;\;\frac{\cos x \cdot \left(\left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \left(\tan \varepsilon + \tan x\right)\right) - \left(\left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \left(1 - \tan x \cdot \tan \varepsilon\right)\right) \cdot \sin x}{\cos x \cdot \left(\left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \left(1 - \tan x \cdot \tan \varepsilon\right)\right)}\\
\mathbf{elif}\;\varepsilon \le 5.810306508670788 \cdot 10^{-52}:\\
\;\;\;\;\varepsilon + \left(x \cdot \varepsilon\right) \cdot \left(x + \varepsilon\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\left(\tan x - \tan \varepsilon\right) \cdot \left(\tan \varepsilon + \tan x\right)}{\tan x - \tan \varepsilon}}{1 - \tan x \cdot \tan \varepsilon} - \tan x\\
\end{array}double f(double x, double eps) {
double r3316628 = x;
double r3316629 = eps;
double r3316630 = r3316628 + r3316629;
double r3316631 = tan(r3316630);
double r3316632 = tan(r3316628);
double r3316633 = r3316631 - r3316632;
return r3316633;
}
double f(double x, double eps) {
double r3316634 = eps;
double r3316635 = -2.1089423986131282e-63;
bool r3316636 = r3316634 <= r3316635;
double r3316637 = x;
double r3316638 = cos(r3316637);
double r3316639 = 1.0;
double r3316640 = tan(r3316637);
double r3316641 = tan(r3316634);
double r3316642 = r3316640 * r3316641;
double r3316643 = r3316642 * r3316642;
double r3316644 = r3316639 - r3316643;
double r3316645 = r3316641 + r3316640;
double r3316646 = r3316644 * r3316645;
double r3316647 = r3316638 * r3316646;
double r3316648 = r3316639 - r3316642;
double r3316649 = r3316644 * r3316648;
double r3316650 = sin(r3316637);
double r3316651 = r3316649 * r3316650;
double r3316652 = r3316647 - r3316651;
double r3316653 = r3316638 * r3316649;
double r3316654 = r3316652 / r3316653;
double r3316655 = 5.810306508670788e-52;
bool r3316656 = r3316634 <= r3316655;
double r3316657 = r3316637 * r3316634;
double r3316658 = r3316637 + r3316634;
double r3316659 = r3316657 * r3316658;
double r3316660 = r3316634 + r3316659;
double r3316661 = r3316640 - r3316641;
double r3316662 = r3316661 * r3316645;
double r3316663 = r3316662 / r3316661;
double r3316664 = r3316663 / r3316648;
double r3316665 = r3316664 - r3316640;
double r3316666 = r3316656 ? r3316660 : r3316665;
double r3316667 = r3316636 ? r3316654 : r3316666;
return r3316667;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.7 |
|---|---|
| Target | 14.9 |
| Herbie | 15.5 |
if eps < -2.1089423986131282e-63Initial program 30.4
rmApplied tan-sum5.3
rmApplied flip--5.4
Applied associate-/r/5.4
rmApplied tan-quot5.4
Applied flip-+5.4
Applied frac-times5.4
Applied frac-sub5.4
if -2.1089423986131282e-63 < eps < 5.810306508670788e-52Initial program 47.0
Taylor expanded around 0 31.6
Simplified31.5
if 5.810306508670788e-52 < eps Initial program 29.1
rmApplied tan-sum3.8
rmApplied flip-+3.9
Simplified3.9
Final simplification15.5
herbie shell --seed 2019168
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))