\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -9.832752395103017500583649272309788342243 \cdot 10^{-18} \lor \neg \left(\varepsilon \le 1.938370975879928752703824162828496810488 \cdot 10^{-31}\right):\\
\;\;\;\;\frac{\tan x \cdot \tan x - \tan \varepsilon \cdot \tan \varepsilon}{\left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x - \tan \varepsilon\right)} - \tan x\\
\mathbf{else}:\\
\;\;\;\;\left(\varepsilon \cdot x\right) \cdot \left(x + \varepsilon\right) + \varepsilon\\
\end{array}double f(double x, double eps) {
double r143675 = x;
double r143676 = eps;
double r143677 = r143675 + r143676;
double r143678 = tan(r143677);
double r143679 = tan(r143675);
double r143680 = r143678 - r143679;
return r143680;
}
double f(double x, double eps) {
double r143681 = eps;
double r143682 = -9.832752395103018e-18;
bool r143683 = r143681 <= r143682;
double r143684 = 1.9383709758799288e-31;
bool r143685 = r143681 <= r143684;
double r143686 = !r143685;
bool r143687 = r143683 || r143686;
double r143688 = x;
double r143689 = tan(r143688);
double r143690 = r143689 * r143689;
double r143691 = tan(r143681);
double r143692 = r143691 * r143691;
double r143693 = r143690 - r143692;
double r143694 = 1.0;
double r143695 = r143689 * r143691;
double r143696 = r143694 - r143695;
double r143697 = r143689 - r143691;
double r143698 = r143696 * r143697;
double r143699 = r143693 / r143698;
double r143700 = r143699 - r143689;
double r143701 = r143681 * r143688;
double r143702 = r143688 + r143681;
double r143703 = r143701 * r143702;
double r143704 = r143703 + r143681;
double r143705 = r143687 ? r143700 : r143704;
return r143705;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.8 |
|---|---|
| Target | 15.2 |
| Herbie | 15.1 |
if eps < -9.832752395103018e-18 or 1.9383709758799288e-31 < eps Initial program 29.9
rmApplied tan-sum1.7
rmApplied flip-+1.8
Applied associate-/l/1.8
if -9.832752395103018e-18 < eps < 1.9383709758799288e-31Initial program 45.0
Taylor expanded around 0 31.0
Simplified30.8
Final simplification15.1
herbie shell --seed 2020001
(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)))