\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -6.929244313528967253629797030059496249939 \cdot 10^{-77}:\\
\;\;\;\;\frac{\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon}{\left(1 - \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}\right) \cdot \left(\cos x \cdot \cos \varepsilon\right)} - \tan x\\
\mathbf{elif}\;\varepsilon \le 1.084923224249312910690492748285721451604 \cdot 10^{-19}:\\
\;\;\;\;\varepsilon + \left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\tan x + \tan \varepsilon\right) \cdot \cos x - \sin x \cdot \left(1 - \tan \varepsilon \cdot \tan x\right)}{\left(1 - \tan \varepsilon \cdot \tan x\right) \cdot \cos x}\\
\end{array}double f(double x, double eps) {
double r113754 = x;
double r113755 = eps;
double r113756 = r113754 + r113755;
double r113757 = tan(r113756);
double r113758 = tan(r113754);
double r113759 = r113757 - r113758;
return r113759;
}
double f(double x, double eps) {
double r113760 = eps;
double r113761 = -6.929244313528967e-77;
bool r113762 = r113760 <= r113761;
double r113763 = x;
double r113764 = sin(r113763);
double r113765 = cos(r113760);
double r113766 = r113764 * r113765;
double r113767 = cos(r113763);
double r113768 = sin(r113760);
double r113769 = r113767 * r113768;
double r113770 = r113766 + r113769;
double r113771 = 1.0;
double r113772 = tan(r113763);
double r113773 = r113772 * r113768;
double r113774 = r113773 / r113765;
double r113775 = r113771 - r113774;
double r113776 = r113767 * r113765;
double r113777 = r113775 * r113776;
double r113778 = r113770 / r113777;
double r113779 = r113778 - r113772;
double r113780 = 1.084923224249313e-19;
bool r113781 = r113760 <= r113780;
double r113782 = r113763 * r113760;
double r113783 = r113760 + r113763;
double r113784 = r113782 * r113783;
double r113785 = r113760 + r113784;
double r113786 = tan(r113760);
double r113787 = r113772 + r113786;
double r113788 = r113787 * r113767;
double r113789 = r113786 * r113772;
double r113790 = r113771 - r113789;
double r113791 = r113764 * r113790;
double r113792 = r113788 - r113791;
double r113793 = r113790 * r113767;
double r113794 = r113792 / r113793;
double r113795 = r113781 ? r113785 : r113794;
double r113796 = r113762 ? r113779 : r113795;
return r113796;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 15.0 |
if eps < -6.929244313528967e-77Initial program 30.9
rmApplied tan-sum6.0
rmApplied tan-quot6.1
Applied tan-quot6.1
Applied frac-add6.1
Applied associate-/l/6.1
rmApplied tan-quot6.1
Applied associate-*r/6.1
if -6.929244313528967e-77 < eps < 1.084923224249313e-19Initial program 46.6
rmApplied tan-sum46.6
Taylor expanded around 0 30.1
Simplified29.9
if 1.084923224249313e-19 < eps Initial program 29.0
rmApplied tan-sum1.2
rmApplied add-cube-cbrt1.4
rmApplied tan-quot1.4
Applied frac-sub1.4
Simplified1.6
Simplified1.3
Final simplification15.0
herbie shell --seed 2019303
(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)))