\tan \left(x + \varepsilon\right) - \tan x
\mathsf{fma}\left(\frac{\frac{\sin x}{\cos x}}{1 - {\left(\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin x}{\cos x}\right)}^{3}}, 1 + \left(\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin x}{\cos x} + \left(\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin x}{\cos x}\right) \cdot \left(\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin x}{\cos x}\right)\right), \frac{-\sin x}{\cos x}\right) + \frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x}{\cos x}}double f(double x, double eps) {
double r121736 = x;
double r121737 = eps;
double r121738 = r121736 + r121737;
double r121739 = tan(r121738);
double r121740 = tan(r121736);
double r121741 = r121739 - r121740;
return r121741;
}
double f(double x, double eps) {
double r121742 = x;
double r121743 = sin(r121742);
double r121744 = cos(r121742);
double r121745 = r121743 / r121744;
double r121746 = 1.0;
double r121747 = eps;
double r121748 = sin(r121747);
double r121749 = cos(r121747);
double r121750 = r121748 / r121749;
double r121751 = r121750 * r121745;
double r121752 = 3.0;
double r121753 = pow(r121751, r121752);
double r121754 = r121746 - r121753;
double r121755 = r121745 / r121754;
double r121756 = r121751 * r121751;
double r121757 = r121751 + r121756;
double r121758 = r121746 + r121757;
double r121759 = -r121743;
double r121760 = r121759 / r121744;
double r121761 = fma(r121755, r121758, r121760);
double r121762 = r121750 * r121743;
double r121763 = r121762 / r121744;
double r121764 = r121746 - r121763;
double r121765 = r121750 / r121764;
double r121766 = r121761 + r121765;
return r121766;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 15.3 |
| Herbie | 13.0 |
Initial program 36.9
Simplified36.9
rmApplied tan-sum21.5
Simplified21.5
Taylor expanded around inf 21.6
Simplified13.0
Taylor expanded around inf 13.0
Simplified13.0
rmApplied flip3--13.0
Applied associate-/r/13.0
Applied fma-neg13.0
Simplified13.0
Final simplification13.0
herbie shell --seed 2019174 +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)))