\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.284746753953384226458203300782990805007 \cdot 10^{-10}:\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{\frac{1 - \frac{{\left(\sin x\right)}^{2} \cdot \sin \varepsilon}{\cos \varepsilon \cdot {\left(\cos x\right)}^{2}} \cdot \tan \varepsilon}{1 + \tan x \cdot \tan \varepsilon}} - \tan x\\
\mathbf{elif}\;\varepsilon \le 3.283557063273864622345514890573875193278 \cdot 10^{-29}:\\
\;\;\;\;\varepsilon + \varepsilon \cdot \left(x \cdot \left(\varepsilon + x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{\sin x}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \cos x} + \frac{\sin \varepsilon}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \cos \varepsilon}\right) - \frac{\sin x}{\cos x}\\
\end{array}double f(double x, double eps) {
double r110379 = x;
double r110380 = eps;
double r110381 = r110379 + r110380;
double r110382 = tan(r110381);
double r110383 = tan(r110379);
double r110384 = r110382 - r110383;
return r110384;
}
double f(double x, double eps) {
double r110385 = eps;
double r110386 = -4.284746753953384e-10;
bool r110387 = r110385 <= r110386;
double r110388 = x;
double r110389 = tan(r110388);
double r110390 = tan(r110385);
double r110391 = r110389 + r110390;
double r110392 = 1.0;
double r110393 = sin(r110388);
double r110394 = 2.0;
double r110395 = pow(r110393, r110394);
double r110396 = sin(r110385);
double r110397 = r110395 * r110396;
double r110398 = cos(r110385);
double r110399 = cos(r110388);
double r110400 = pow(r110399, r110394);
double r110401 = r110398 * r110400;
double r110402 = r110397 / r110401;
double r110403 = r110402 * r110390;
double r110404 = r110392 - r110403;
double r110405 = r110389 * r110390;
double r110406 = r110392 + r110405;
double r110407 = r110404 / r110406;
double r110408 = r110391 / r110407;
double r110409 = r110408 - r110389;
double r110410 = 3.2835570632738646e-29;
bool r110411 = r110385 <= r110410;
double r110412 = r110385 + r110388;
double r110413 = r110388 * r110412;
double r110414 = r110385 * r110413;
double r110415 = r110385 + r110414;
double r110416 = r110393 * r110396;
double r110417 = r110399 * r110398;
double r110418 = r110416 / r110417;
double r110419 = r110392 - r110418;
double r110420 = r110419 * r110399;
double r110421 = r110393 / r110420;
double r110422 = r110419 * r110398;
double r110423 = r110396 / r110422;
double r110424 = r110421 + r110423;
double r110425 = r110393 / r110399;
double r110426 = r110424 - r110425;
double r110427 = r110411 ? r110415 : r110426;
double r110428 = r110387 ? r110409 : r110427;
return r110428;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.4 |
|---|---|
| Target | 14.7 |
| Herbie | 15.7 |
if eps < -4.284746753953384e-10Initial program 28.7
rmApplied tan-sum0.5
rmApplied flip--0.6
Simplified0.6
rmApplied associate-*r*0.6
Taylor expanded around inf 0.6
if -4.284746753953384e-10 < eps < 3.2835570632738646e-29Initial program 45.0
Taylor expanded around 0 31.8
Simplified31.8
if 3.2835570632738646e-29 < eps Initial program 29.1
rmApplied tan-sum2.1
Taylor expanded around inf 2.3
Final simplification15.7
herbie shell --seed 2019305
(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)))