\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.1070254757403724 \cdot 10^{-22}:\\
\;\;\;\;\frac{1}{1 - \tan x \cdot \tan \varepsilon} \cdot \left(\tan \varepsilon + \tan x\right) - \tan x\\
\mathbf{elif}\;\varepsilon \le 2.7293458866662548 \cdot 10^{-21}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(x + \varepsilon\right) + \varepsilon\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\tan \varepsilon + \tan x\right) \cdot \cos x - \sin x \cdot \left(1 - \tan x \cdot \tan \varepsilon\right)}{\cos x \cdot \left(1 - \tan x \cdot \tan \varepsilon\right)}\\
\end{array}double f(double x, double eps) {
double r1314798 = x;
double r1314799 = eps;
double r1314800 = r1314798 + r1314799;
double r1314801 = tan(r1314800);
double r1314802 = tan(r1314798);
double r1314803 = r1314801 - r1314802;
return r1314803;
}
double f(double x, double eps) {
double r1314804 = eps;
double r1314805 = -2.1070254757403724e-22;
bool r1314806 = r1314804 <= r1314805;
double r1314807 = 1.0;
double r1314808 = x;
double r1314809 = tan(r1314808);
double r1314810 = tan(r1314804);
double r1314811 = r1314809 * r1314810;
double r1314812 = r1314807 - r1314811;
double r1314813 = r1314807 / r1314812;
double r1314814 = r1314810 + r1314809;
double r1314815 = r1314813 * r1314814;
double r1314816 = r1314815 - r1314809;
double r1314817 = 2.7293458866662548e-21;
bool r1314818 = r1314804 <= r1314817;
double r1314819 = r1314808 * r1314804;
double r1314820 = r1314808 + r1314804;
double r1314821 = r1314819 * r1314820;
double r1314822 = r1314821 + r1314804;
double r1314823 = cos(r1314808);
double r1314824 = r1314814 * r1314823;
double r1314825 = sin(r1314808);
double r1314826 = r1314825 * r1314812;
double r1314827 = r1314824 - r1314826;
double r1314828 = r1314823 * r1314812;
double r1314829 = r1314827 / r1314828;
double r1314830 = r1314818 ? r1314822 : r1314829;
double r1314831 = r1314806 ? r1314816 : r1314830;
return r1314831;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.3 |
|---|---|
| Target | 15.2 |
| Herbie | 15.2 |
if eps < -2.1070254757403724e-22Initial program 31.3
rmApplied tan-sum1.6
rmApplied div-inv1.6
rmApplied *-un-lft-identity1.6
Applied *-un-lft-identity1.6
Applied times-frac1.6
Applied associate-*r*1.6
Simplified1.6
if -2.1070254757403724e-22 < eps < 2.7293458866662548e-21Initial program 44.9
Taylor expanded around 0 30.6
Simplified30.6
if 2.7293458866662548e-21 < eps Initial program 29.8
rmApplied tan-sum1.4
rmApplied div-inv1.5
rmApplied tan-quot1.5
Applied un-div-inv1.5
Applied frac-sub1.6
Final simplification15.2
herbie shell --seed 2019151
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))