\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.029764410213285732202184952592542832375 \cdot 10^{-63}:\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \sqrt[3]{{\left(\tan x \cdot \tan \varepsilon\right)}^{3}}} - \tan x\\
\mathbf{elif}\;\varepsilon \le 1.132620102760092490884084281497646648791 \cdot 10^{-37}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right) + \varepsilon\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\tan x + \tan \varepsilon}{\log \left(e^{1 - \tan x \cdot \tan \varepsilon}\right)} \cdot \left(\tan x + \tan \varepsilon\right)}{1 - \tan x \cdot \tan \varepsilon} + \left(-\tan x \cdot \tan x\right)}{\frac{\tan x + \tan \varepsilon}{\log \left(e^{1 - \tan x \cdot \tan \varepsilon}\right)} + \tan x}\\
\end{array}double f(double x, double eps) {
double r73766 = x;
double r73767 = eps;
double r73768 = r73766 + r73767;
double r73769 = tan(r73768);
double r73770 = tan(r73766);
double r73771 = r73769 - r73770;
return r73771;
}
double f(double x, double eps) {
double r73772 = eps;
double r73773 = -1.0297644102132857e-63;
bool r73774 = r73772 <= r73773;
double r73775 = x;
double r73776 = tan(r73775);
double r73777 = tan(r73772);
double r73778 = r73776 + r73777;
double r73779 = 1.0;
double r73780 = r73776 * r73777;
double r73781 = 3.0;
double r73782 = pow(r73780, r73781);
double r73783 = cbrt(r73782);
double r73784 = r73779 - r73783;
double r73785 = r73778 / r73784;
double r73786 = r73785 - r73776;
double r73787 = 1.1326201027600925e-37;
bool r73788 = r73772 <= r73787;
double r73789 = r73775 * r73772;
double r73790 = r73772 + r73775;
double r73791 = r73789 * r73790;
double r73792 = r73791 + r73772;
double r73793 = r73779 - r73780;
double r73794 = exp(r73793);
double r73795 = log(r73794);
double r73796 = r73778 / r73795;
double r73797 = r73796 * r73778;
double r73798 = r73797 / r73793;
double r73799 = r73776 * r73776;
double r73800 = -r73799;
double r73801 = r73798 + r73800;
double r73802 = r73796 + r73776;
double r73803 = r73801 / r73802;
double r73804 = r73788 ? r73792 : r73803;
double r73805 = r73774 ? r73786 : r73804;
return r73805;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 15.6 |
if eps < -1.0297644102132857e-63Initial program 29.7
rmApplied tan-sum4.8
rmApplied add-cbrt-cube4.8
Applied add-cbrt-cube4.9
Applied cbrt-unprod4.8
Simplified4.8
if -1.0297644102132857e-63 < eps < 1.1326201027600925e-37Initial program 46.9
rmApplied tan-sum46.9
rmApplied add-log-exp46.9
Applied add-log-exp46.9
Applied diff-log46.9
Simplified46.9
rmApplied tan-quot46.9
Applied associate-*r/46.9
Taylor expanded around 0 31.9
Simplified31.7
if 1.1326201027600925e-37 < eps Initial program 30.1
rmApplied tan-sum2.5
rmApplied add-log-exp2.6
Applied add-log-exp2.6
Applied diff-log2.6
Simplified2.6
rmApplied flip--2.7
Simplified2.7
Final simplification15.6
herbie shell --seed 2019308
(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)))