\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -5.9139493031978231 \cdot 10^{-58}:\\
\;\;\;\;\frac{\left(\left(\tan x + \tan \varepsilon\right) \cdot \left(1 + \tan x \cdot \tan \varepsilon\right)\right) \cdot \cos x - \left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \sin x}{\left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \cos x}\\
\mathbf{elif}\;\varepsilon \le 2.32714459562123 \cdot 10^{-60}:\\
\;\;\;\;\left(\varepsilon \cdot x\right) \cdot \left(x + \varepsilon\right) + \varepsilon\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\left(\tan x + \tan \varepsilon\right) \cdot \left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right)\right) \cdot \cos x - \left(\left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \left(1 - \tan x \cdot \tan \varepsilon\right)\right) \cdot \sin x}{\left(\left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \left(1 - \tan x \cdot \tan \varepsilon\right)\right) \cdot \cos x}\\
\end{array}double f(double x, double eps) {
double r154433 = x;
double r154434 = eps;
double r154435 = r154433 + r154434;
double r154436 = tan(r154435);
double r154437 = tan(r154433);
double r154438 = r154436 - r154437;
return r154438;
}
double f(double x, double eps) {
double r154439 = eps;
double r154440 = -5.913949303197823e-58;
bool r154441 = r154439 <= r154440;
double r154442 = x;
double r154443 = tan(r154442);
double r154444 = tan(r154439);
double r154445 = r154443 + r154444;
double r154446 = 1.0;
double r154447 = r154443 * r154444;
double r154448 = r154446 + r154447;
double r154449 = r154445 * r154448;
double r154450 = cos(r154442);
double r154451 = r154449 * r154450;
double r154452 = r154447 * r154447;
double r154453 = r154446 - r154452;
double r154454 = sin(r154442);
double r154455 = r154453 * r154454;
double r154456 = r154451 - r154455;
double r154457 = r154453 * r154450;
double r154458 = r154456 / r154457;
double r154459 = 2.3271445956212298e-60;
bool r154460 = r154439 <= r154459;
double r154461 = r154439 * r154442;
double r154462 = r154442 + r154439;
double r154463 = r154461 * r154462;
double r154464 = r154463 + r154439;
double r154465 = r154445 * r154453;
double r154466 = r154465 * r154450;
double r154467 = r154446 - r154447;
double r154468 = r154453 * r154467;
double r154469 = r154468 * r154454;
double r154470 = r154466 - r154469;
double r154471 = r154468 * r154450;
double r154472 = r154470 / r154471;
double r154473 = r154460 ? r154464 : r154472;
double r154474 = r154441 ? r154458 : r154473;
return r154474;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 14.9 |
| Herbie | 15.7 |
if eps < -5.913949303197823e-58Initial program 30.6
rmApplied tan-sum4.7
rmApplied flip--4.7
Applied associate-/r/4.7
Simplified4.7
rmApplied tan-quot4.7
Applied associate-*l/4.7
Applied frac-sub4.7
if -5.913949303197823e-58 < eps < 2.3271445956212298e-60Initial program 46.6
Taylor expanded around 0 31.4
Simplified31.2
if 2.3271445956212298e-60 < eps Initial program 29.9
rmApplied tan-sum5.3
rmApplied flip--5.3
Applied associate-/r/5.3
Simplified5.3
rmApplied tan-quot5.3
Applied flip-+5.3
Applied frac-times5.3
Applied frac-sub5.4
Simplified5.4
Final simplification15.7
herbie shell --seed 2020081
(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)))