\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.284256269035985405500607176917200639033 \cdot 10^{-29} \lor \neg \left(\varepsilon \le 2.032772979059420834328953766570879460726 \cdot 10^{-23}\right):\\
\;\;\;\;\frac{\frac{\sin \varepsilon}{\cos \varepsilon} + \frac{\sin x}{\cos x}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}} - \tan x\\
\mathbf{else}:\\
\;\;\;\;x \cdot {\varepsilon}^{2} + \left(\varepsilon + {x}^{2} \cdot \varepsilon\right)\\
\end{array}double f(double x, double eps) {
double r131386 = x;
double r131387 = eps;
double r131388 = r131386 + r131387;
double r131389 = tan(r131388);
double r131390 = tan(r131386);
double r131391 = r131389 - r131390;
return r131391;
}
double f(double x, double eps) {
double r131392 = eps;
double r131393 = -3.2842562690359854e-29;
bool r131394 = r131392 <= r131393;
double r131395 = 2.0327729790594208e-23;
bool r131396 = r131392 <= r131395;
double r131397 = !r131396;
bool r131398 = r131394 || r131397;
double r131399 = sin(r131392);
double r131400 = cos(r131392);
double r131401 = r131399 / r131400;
double r131402 = x;
double r131403 = sin(r131402);
double r131404 = cos(r131402);
double r131405 = r131403 / r131404;
double r131406 = r131401 + r131405;
double r131407 = 1.0;
double r131408 = r131403 * r131399;
double r131409 = r131404 * r131400;
double r131410 = r131408 / r131409;
double r131411 = r131407 - r131410;
double r131412 = r131406 / r131411;
double r131413 = tan(r131402);
double r131414 = r131412 - r131413;
double r131415 = 2.0;
double r131416 = pow(r131392, r131415);
double r131417 = r131402 * r131416;
double r131418 = pow(r131402, r131415);
double r131419 = r131418 * r131392;
double r131420 = r131392 + r131419;
double r131421 = r131417 + r131420;
double r131422 = r131398 ? r131414 : r131421;
return r131422;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.3 |
|---|---|
| Target | 15.7 |
| Herbie | 15.6 |
if eps < -3.2842562690359854e-29 or 2.0327729790594208e-23 < eps Initial program 30.5
rmApplied tan-sum1.7
rmApplied clear-num1.8
Taylor expanded around inf 1.9
if -3.2842562690359854e-29 < eps < 2.0327729790594208e-23Initial program 45.5
rmApplied tan-sum45.5
rmApplied tan-quot45.5
Applied associate-*r/45.5
Taylor expanded around 0 32.2
Final simplification15.6
herbie shell --seed 2020002
(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)))