\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -9.69392132933039565502310610566995512653 \cdot 10^{-53}:\\
\;\;\;\;\frac{\frac{\left(\tan \varepsilon + \tan x\right) \cdot \left(\tan x - \tan \varepsilon\right)}{\tan x - \tan \varepsilon}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos x}} - \tan x\\
\mathbf{elif}\;\varepsilon \le 1.171008892783406389439750823648814644065 \cdot 10^{-92}:\\
\;\;\;\;\varepsilon + \left(x + \frac{1}{3} \cdot \varepsilon\right) \cdot \left(\varepsilon \cdot \varepsilon\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\tan \varepsilon + \tan x\right) \cdot \cos x - \sin x \cdot \left(1 - \tan \varepsilon \cdot \tan x\right)}{\cos x \cdot \left(1 - \tan \varepsilon \cdot \tan x\right)}\\
\end{array}double f(double x, double eps) {
double r5428454 = x;
double r5428455 = eps;
double r5428456 = r5428454 + r5428455;
double r5428457 = tan(r5428456);
double r5428458 = tan(r5428454);
double r5428459 = r5428457 - r5428458;
return r5428459;
}
double f(double x, double eps) {
double r5428460 = eps;
double r5428461 = -9.693921329330396e-53;
bool r5428462 = r5428460 <= r5428461;
double r5428463 = tan(r5428460);
double r5428464 = x;
double r5428465 = tan(r5428464);
double r5428466 = r5428463 + r5428465;
double r5428467 = r5428465 - r5428463;
double r5428468 = r5428466 * r5428467;
double r5428469 = r5428468 / r5428467;
double r5428470 = 1.0;
double r5428471 = sin(r5428464);
double r5428472 = sin(r5428460);
double r5428473 = r5428471 * r5428472;
double r5428474 = cos(r5428460);
double r5428475 = cos(r5428464);
double r5428476 = r5428474 * r5428475;
double r5428477 = r5428473 / r5428476;
double r5428478 = r5428470 - r5428477;
double r5428479 = r5428469 / r5428478;
double r5428480 = r5428479 - r5428465;
double r5428481 = 1.1710088927834064e-92;
bool r5428482 = r5428460 <= r5428481;
double r5428483 = 0.3333333333333333;
double r5428484 = r5428483 * r5428460;
double r5428485 = r5428464 + r5428484;
double r5428486 = r5428460 * r5428460;
double r5428487 = r5428485 * r5428486;
double r5428488 = r5428460 + r5428487;
double r5428489 = r5428466 * r5428475;
double r5428490 = r5428463 * r5428465;
double r5428491 = r5428470 - r5428490;
double r5428492 = r5428471 * r5428491;
double r5428493 = r5428489 - r5428492;
double r5428494 = r5428475 * r5428491;
double r5428495 = r5428493 / r5428494;
double r5428496 = r5428482 ? r5428488 : r5428495;
double r5428497 = r5428462 ? r5428480 : r5428496;
return r5428497;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 14.2 |
if eps < -9.693921329330396e-53Initial program 29.9
rmApplied tan-sum4.1
Taylor expanded around inf 4.2
rmApplied flip-+4.2
Simplified4.2
if -9.693921329330396e-53 < eps < 1.1710088927834064e-92Initial program 47.8
rmApplied tan-sum47.8
Taylor expanded around inf 48.0
Taylor expanded around 0 27.6
Simplified27.6
if 1.1710088927834064e-92 < eps Initial program 30.8
rmApplied tan-quot30.6
Applied tan-sum7.3
Applied frac-sub7.3
Final simplification14.2
herbie shell --seed 2019200
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))