\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -7.7703093406410024 \cdot 10^{-24} \lor \neg \left(\varepsilon \le 3.58165822243231855 \cdot 10^{-19}\right):\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}} - \tan x\\
\mathbf{else}:\\
\;\;\;\;\left(\varepsilon \cdot x\right) \cdot \left(x + \varepsilon\right) + \varepsilon\\
\end{array}double code(double x, double eps) {
return ((double) (((double) tan(((double) (x + eps)))) - ((double) tan(x))));
}
double code(double x, double eps) {
double VAR;
if (((eps <= -7.770309340641002e-24) || !(eps <= 3.5816582224323186e-19))) {
VAR = ((double) (((double) (((double) (((double) tan(x)) + ((double) tan(eps)))) / ((double) (1.0 - ((double) (((double) (((double) tan(x)) * ((double) sin(eps)))) / ((double) cos(eps)))))))) - ((double) tan(x))));
} else {
VAR = ((double) (((double) (((double) (eps * x)) * ((double) (x + eps)))) + eps));
}
return VAR;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 14.9 |
| Herbie | 15.5 |
if eps < -7.770309340641002e-24 or 3.5816582224323186e-19 < eps Initial program 29.6
rmApplied tan-sum1.3
rmApplied tan-quot1.3
Applied associate-*r/1.3
if -7.770309340641002e-24 < eps < 3.5816582224323186e-19Initial program 45.0
Taylor expanded around 0 31.5
Simplified31.3
Final simplification15.5
herbie shell --seed 2020148
(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)))