\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \leq -1.7248288871182305 \cdot 10^{-62} \lor \neg \left(\varepsilon \leq 5.817203080719242 \cdot 10^{-77}\right):\\
\;\;\;\;\frac{{\left(\sin x\right)}^{2}}{{\left(\cos x\right)}^{2}} \cdot \frac{{\left(\sin \varepsilon\right)}^{3}}{{\left(\cos \varepsilon\right)}^{3} \cdot \left(1 - {\left(\frac{\sin x}{\cos x} \cdot \frac{\sin \varepsilon}{\cos \varepsilon}\right)}^{3}\right)} + \left(\frac{{\left(\sin x\right)}^{2}}{{\left(\cos x\right)}^{2}} \cdot \frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - {\left(\frac{\sin x}{\cos x} \cdot \frac{\sin \varepsilon}{\cos \varepsilon}\right)}^{3}\right)} + \left(\left(\frac{\sin x}{\cos x \cdot \left(1 - {\left(\frac{\sin x}{\cos x} \cdot \frac{\sin \varepsilon}{\cos \varepsilon}\right)}^{3}\right)} + \left(\frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - {\left(\frac{\sin x}{\cos x} \cdot \frac{\sin \varepsilon}{\cos \varepsilon}\right)}^{3}\right)} + \frac{{\left(\sin \varepsilon\right)}^{2}}{\left(1 - {\left(\frac{\sin x}{\cos x} \cdot \frac{\sin \varepsilon}{\cos \varepsilon}\right)}^{3}\right) \cdot {\left(\cos \varepsilon\right)}^{2}} \cdot \left(\frac{\sin x}{\cos x} + {\left(\frac{\sin x}{\cos x}\right)}^{3}\right)\right)\right) - \frac{\sin x}{\cos x}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\varepsilon + x \cdot \left(\varepsilon \cdot \left(\varepsilon + x\right)\right)\\
\end{array}(FPCore (x eps) :precision binary64 (- (tan (+ x eps)) (tan x)))
(FPCore (x eps)
:precision binary64
(if (or (<= eps -1.7248288871182305e-62) (not (<= eps 5.817203080719242e-77)))
(+
(*
(/ (pow (sin x) 2.0) (pow (cos x) 2.0))
(/
(pow (sin eps) 3.0)
(*
(pow (cos eps) 3.0)
(- 1.0 (pow (* (/ (sin x) (cos x)) (/ (sin eps) (cos eps))) 3.0)))))
(+
(*
(/ (pow (sin x) 2.0) (pow (cos x) 2.0))
(/
(sin eps)
(*
(cos eps)
(- 1.0 (pow (* (/ (sin x) (cos x)) (/ (sin eps) (cos eps))) 3.0)))))
(-
(+
(/
(sin x)
(*
(cos x)
(- 1.0 (pow (* (/ (sin x) (cos x)) (/ (sin eps) (cos eps))) 3.0))))
(+
(/
(sin eps)
(*
(cos eps)
(- 1.0 (pow (* (/ (sin x) (cos x)) (/ (sin eps) (cos eps))) 3.0))))
(*
(/
(pow (sin eps) 2.0)
(*
(- 1.0 (pow (* (/ (sin x) (cos x)) (/ (sin eps) (cos eps))) 3.0))
(pow (cos eps) 2.0)))
(+ (/ (sin x) (cos x)) (pow (/ (sin x) (cos x)) 3.0)))))
(/ (sin x) (cos x)))))
(+ eps (* x (* eps (+ eps x))))))double code(double x, double eps) {
return ((double) (((double) tan(((double) (x + eps)))) - ((double) tan(x))));
}
double code(double x, double eps) {
double tmp;
if (((eps <= -1.7248288871182305e-62) || !(eps <= 5.817203080719242e-77))) {
tmp = ((double) (((double) ((((double) pow(((double) sin(x)), 2.0)) / ((double) pow(((double) cos(x)), 2.0))) * (((double) pow(((double) sin(eps)), 3.0)) / ((double) (((double) pow(((double) cos(eps)), 3.0)) * ((double) (1.0 - ((double) pow(((double) ((((double) sin(x)) / ((double) cos(x))) * (((double) sin(eps)) / ((double) cos(eps))))), 3.0))))))))) + ((double) (((double) ((((double) pow(((double) sin(x)), 2.0)) / ((double) pow(((double) cos(x)), 2.0))) * (((double) sin(eps)) / ((double) (((double) cos(eps)) * ((double) (1.0 - ((double) pow(((double) ((((double) sin(x)) / ((double) cos(x))) * (((double) sin(eps)) / ((double) cos(eps))))), 3.0))))))))) + ((double) (((double) ((((double) sin(x)) / ((double) (((double) cos(x)) * ((double) (1.0 - ((double) pow(((double) ((((double) sin(x)) / ((double) cos(x))) * (((double) sin(eps)) / ((double) cos(eps))))), 3.0))))))) + ((double) ((((double) sin(eps)) / ((double) (((double) cos(eps)) * ((double) (1.0 - ((double) pow(((double) ((((double) sin(x)) / ((double) cos(x))) * (((double) sin(eps)) / ((double) cos(eps))))), 3.0))))))) + ((double) ((((double) pow(((double) sin(eps)), 2.0)) / ((double) (((double) (1.0 - ((double) pow(((double) ((((double) sin(x)) / ((double) cos(x))) * (((double) sin(eps)) / ((double) cos(eps))))), 3.0)))) * ((double) pow(((double) cos(eps)), 2.0))))) * ((double) ((((double) sin(x)) / ((double) cos(x))) + ((double) pow((((double) sin(x)) / ((double) cos(x))), 3.0)))))))))) - (((double) sin(x)) / ((double) cos(x)))))))));
} else {
tmp = ((double) (eps + ((double) (x * ((double) (eps * ((double) (eps + x))))))));
}
return tmp;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.3 |
|---|---|
| Target | 15.5 |
| Herbie | 15.1 |
if eps < -1.72482888711823047e-62 or 5.81720308071924208e-77 < eps Initial program Error: 31.1 bits
rmApplied tan-sumError: 5.9 bits
rmApplied flip3--Error: 5.9 bits
Applied associate-/r/Error: 5.9 bits
SimplifiedError: 5.9 bits
Taylor expanded around inf Error: 6.1 bits
SimplifiedError: 5.3 bits
if -1.72482888711823047e-62 < eps < 5.81720308071924208e-77Initial program Error: 47.3 bits
Taylor expanded around 0 Error: 31.3 bits
SimplifiedError: 31.1 bits
Final simplificationError: 15.1 bits
herbie shell --seed 2020203
(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)))