\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le \frac{-3245935200223819}{3.369993333393829974333376885877453834205 \cdot 10^{66}} \lor \neg \left(\varepsilon \le \frac{7457503469233993}{5.653910607290829854666552002377339250648 \cdot 10^{73}}\right):\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \log \left(e^{\frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}}\right)} - \tan x\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(x + \varepsilon\right) + \varepsilon\\
\end{array}double f(double x, double eps) {
double r448317 = x;
double r448318 = eps;
double r448319 = r448317 + r448318;
double r448320 = tan(r448319);
double r448321 = tan(r448317);
double r448322 = r448320 - r448321;
return r448322;
}
double f(double x, double eps) {
double r448323 = eps;
double r448324 = -3245935200223819.0;
double r448325 = 3.36999333339383e+66;
double r448326 = r448324 / r448325;
bool r448327 = r448323 <= r448326;
double r448328 = 7457503469233993.0;
double r448329 = 5.65391060729083e+73;
double r448330 = r448328 / r448329;
bool r448331 = r448323 <= r448330;
double r448332 = !r448331;
bool r448333 = r448327 || r448332;
double r448334 = x;
double r448335 = tan(r448334);
double r448336 = tan(r448323);
double r448337 = r448335 + r448336;
double r448338 = 1.0;
double r448339 = sin(r448323);
double r448340 = r448335 * r448339;
double r448341 = cos(r448323);
double r448342 = r448340 / r448341;
double r448343 = exp(r448342);
double r448344 = log(r448343);
double r448345 = r448338 - r448344;
double r448346 = r448337 / r448345;
double r448347 = r448346 - r448335;
double r448348 = r448334 * r448323;
double r448349 = r448334 + r448323;
double r448350 = r448348 * r448349;
double r448351 = r448350 + r448323;
double r448352 = r448333 ? r448347 : r448351;
return r448352;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.2 |
| Herbie | 15.5 |
if eps < -9.631874247522397e-52 or 1.3189991825511699e-58 < eps Initial program 29.9
rmApplied tan-sum4.4
rmApplied tan-quot4.4
Applied associate-*r/4.4
rmApplied add-log-exp4.5
if -9.631874247522397e-52 < eps < 1.3189991825511699e-58Initial program 47.0
Taylor expanded around 0 31.9
Simplified31.6
Final simplification15.5
herbie shell --seed 350497007
(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)))