\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.757922927393181967231988612780291928877 \cdot 10^{-27} \lor \neg \left(\varepsilon \le 1.760250544683835501772756411202209200384 \cdot 10^{-79}\right):\\
\;\;\;\;\frac{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon} \cdot \frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon} - \tan x \cdot \tan x}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon} + \tan x}\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right) + \varepsilon\\
\end{array}double f(double x, double eps) {
double r106493 = x;
double r106494 = eps;
double r106495 = r106493 + r106494;
double r106496 = tan(r106495);
double r106497 = tan(r106493);
double r106498 = r106496 - r106497;
return r106498;
}
double f(double x, double eps) {
double r106499 = eps;
double r106500 = -1.757922927393182e-27;
bool r106501 = r106499 <= r106500;
double r106502 = 1.7602505446838355e-79;
bool r106503 = r106499 <= r106502;
double r106504 = !r106503;
bool r106505 = r106501 || r106504;
double r106506 = x;
double r106507 = tan(r106506);
double r106508 = tan(r106499);
double r106509 = r106507 + r106508;
double r106510 = 1.0;
double r106511 = r106507 * r106508;
double r106512 = r106510 - r106511;
double r106513 = r106509 / r106512;
double r106514 = r106513 * r106513;
double r106515 = r106507 * r106507;
double r106516 = r106514 - r106515;
double r106517 = r106513 + r106507;
double r106518 = r106516 / r106517;
double r106519 = r106506 * r106499;
double r106520 = r106499 + r106506;
double r106521 = r106519 * r106520;
double r106522 = r106521 + r106499;
double r106523 = r106505 ? r106518 : r106522;
return r106523;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.7 |
|---|---|
| Target | 14.9 |
| Herbie | 15.5 |
if eps < -1.757922927393182e-27 or 1.7602505446838355e-79 < eps Initial program 29.6
rmApplied tan-sum4.5
rmApplied flip--4.6
if -1.757922927393182e-27 < eps < 1.7602505446838355e-79Initial program 46.8
rmApplied tan-sum46.8
Taylor expanded around 0 31.4
Simplified31.2
Final simplification15.5
herbie shell --seed 2019323
(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)))