\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.2497976182633953 \cdot 10^{-14}:\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)} \cdot \left(1 + \log \left(e^{\frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}}\right)\right) - \tan x\\
\mathbf{elif}\;\varepsilon \le 2.1114736186435238 \cdot 10^{-119}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right) + \varepsilon\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-\sin x\right) \cdot \left(1 + \left(-\tan x \cdot \tan \varepsilon\right)\right) + \left(\frac{\tan x + \tan \varepsilon}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)} \cdot \cos x\right) \cdot \left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right)}{\cos x \cdot \left(1 + \left(-\tan x \cdot \tan \varepsilon\right)\right)}\\
\end{array}double f(double x, double eps) {
double r133717 = x;
double r133718 = eps;
double r133719 = r133717 + r133718;
double r133720 = tan(r133719);
double r133721 = tan(r133717);
double r133722 = r133720 - r133721;
return r133722;
}
double f(double x, double eps) {
double r133723 = eps;
double r133724 = -4.2497976182633953e-14;
bool r133725 = r133723 <= r133724;
double r133726 = x;
double r133727 = tan(r133726);
double r133728 = tan(r133723);
double r133729 = r133727 + r133728;
double r133730 = 1.0;
double r133731 = r133727 * r133728;
double r133732 = r133731 * r133731;
double r133733 = r133730 - r133732;
double r133734 = r133729 / r133733;
double r133735 = sin(r133726);
double r133736 = sin(r133723);
double r133737 = r133735 * r133736;
double r133738 = cos(r133726);
double r133739 = cos(r133723);
double r133740 = r133738 * r133739;
double r133741 = r133737 / r133740;
double r133742 = exp(r133741);
double r133743 = log(r133742);
double r133744 = r133730 + r133743;
double r133745 = r133734 * r133744;
double r133746 = r133745 - r133727;
double r133747 = 2.1114736186435238e-119;
bool r133748 = r133723 <= r133747;
double r133749 = r133726 * r133723;
double r133750 = r133723 + r133726;
double r133751 = r133749 * r133750;
double r133752 = r133751 + r133723;
double r133753 = -r133735;
double r133754 = -r133731;
double r133755 = r133730 + r133754;
double r133756 = r133753 * r133755;
double r133757 = r133734 * r133738;
double r133758 = r133757 * r133733;
double r133759 = r133756 + r133758;
double r133760 = r133738 * r133755;
double r133761 = r133759 / r133760;
double r133762 = r133748 ? r133752 : r133761;
double r133763 = r133725 ? r133746 : r133762;
return r133763;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.1 |
| Herbie | 15.8 |
if eps < -4.2497976182633953e-14Initial program 29.9
rmApplied tan-sum0.8
rmApplied flip--0.9
Applied associate-/r/0.8
Simplified0.8
rmApplied add-log-exp1.0
rmApplied tan-quot1.0
Applied tan-quot1.0
Applied frac-times1.0
if -4.2497976182633953e-14 < eps < 2.1114736186435238e-119Initial program 46.4
rmApplied tan-sum46.3
Taylor expanded around 0 31.1
Simplified30.9
if 2.1114736186435238e-119 < eps Initial program 31.5
rmApplied tan-sum10.0
rmApplied flip--10.0
Applied associate-/r/10.0
Simplified10.0
rmApplied add-log-exp10.0
rmApplied tan-quot10.1
Applied flip-+10.1
Applied associate-*r/10.0
Applied frac-sub10.1
Simplified10.1
Simplified10.1
Final simplification15.8
herbie shell --seed 2020027
(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)))