\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.950013469467184 \cdot 10^{-38} \lor \neg \left(\varepsilon \le 2.8556285663292881 \cdot 10^{-18}\right):\\
\;\;\;\;\frac{\left(\tan x + \tan \varepsilon\right) \cdot \cos x - \left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \sin x}{\left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \cos x}\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right) + \varepsilon\\
\end{array}double f(double x, double eps) {
double r125086 = x;
double r125087 = eps;
double r125088 = r125086 + r125087;
double r125089 = tan(r125088);
double r125090 = tan(r125086);
double r125091 = r125089 - r125090;
return r125091;
}
double f(double x, double eps) {
double r125092 = eps;
double r125093 = -1.9500134694671836e-38;
bool r125094 = r125092 <= r125093;
double r125095 = 2.855628566329288e-18;
bool r125096 = r125092 <= r125095;
double r125097 = !r125096;
bool r125098 = r125094 || r125097;
double r125099 = x;
double r125100 = tan(r125099);
double r125101 = tan(r125092);
double r125102 = r125100 + r125101;
double r125103 = cos(r125099);
double r125104 = r125102 * r125103;
double r125105 = 1.0;
double r125106 = r125100 * r125101;
double r125107 = r125105 - r125106;
double r125108 = sin(r125099);
double r125109 = r125107 * r125108;
double r125110 = r125104 - r125109;
double r125111 = r125107 * r125103;
double r125112 = r125110 / r125111;
double r125113 = r125099 * r125092;
double r125114 = r125092 + r125099;
double r125115 = r125113 * r125114;
double r125116 = r125115 + r125092;
double r125117 = r125098 ? r125112 : r125116;
return r125117;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.4 |
|---|---|
| Target | 15.2 |
| Herbie | 15.5 |
if eps < -1.9500134694671836e-38 or 2.855628566329288e-18 < eps Initial program 30.2
rmApplied tan-quot30.0
Applied tan-sum2.2
Applied frac-sub2.3
if -1.9500134694671836e-38 < eps < 2.855628566329288e-18Initial program 45.9
rmApplied tan-sum45.9
Taylor expanded around 0 31.4
Simplified31.2
Final simplification15.5
herbie shell --seed 2020047
(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)))