\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.950013469467184 \cdot 10^{-38} \lor \neg \left(\varepsilon \le 2.8556285663292881 \cdot 10^{-18}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 - \left(\tan x \cdot \tan x\right) \cdot \sqrt[3]{{\left(\tan \varepsilon \cdot \tan \varepsilon\right)}^{3}}}, 1 + \tan x \cdot \tan \varepsilon, -\tan x\right)\\
\mathbf{else}:\\
\;\;\;\;\varepsilon \cdot \left(\mathsf{fma}\left(x, x, 1\right) + \varepsilon \cdot x\right)\\
\end{array}double f(double x, double eps) {
double r129383 = x;
double r129384 = eps;
double r129385 = r129383 + r129384;
double r129386 = tan(r129385);
double r129387 = tan(r129383);
double r129388 = r129386 - r129387;
return r129388;
}
double f(double x, double eps) {
double r129389 = eps;
double r129390 = -1.9500134694671836e-38;
bool r129391 = r129389 <= r129390;
double r129392 = 2.855628566329288e-18;
bool r129393 = r129389 <= r129392;
double r129394 = !r129393;
bool r129395 = r129391 || r129394;
double r129396 = x;
double r129397 = tan(r129396);
double r129398 = tan(r129389);
double r129399 = r129397 + r129398;
double r129400 = 1.0;
double r129401 = r129397 * r129397;
double r129402 = r129398 * r129398;
double r129403 = 3.0;
double r129404 = pow(r129402, r129403);
double r129405 = cbrt(r129404);
double r129406 = r129401 * r129405;
double r129407 = r129400 - r129406;
double r129408 = r129399 / r129407;
double r129409 = r129397 * r129398;
double r129410 = r129400 + r129409;
double r129411 = -r129397;
double r129412 = fma(r129408, r129410, r129411);
double r129413 = fma(r129396, r129396, r129400);
double r129414 = r129389 * r129396;
double r129415 = r129413 + r129414;
double r129416 = r129389 * r129415;
double r129417 = r129395 ? r129412 : r129416;
return r129417;
}




Bits error versus x




Bits error versus eps
| Original | 37.4 |
|---|---|
| Target | 15.2 |
| Herbie | 15.6 |
if eps < -1.9500134694671836e-38 or 2.855628566329288e-18 < eps Initial program 30.2
rmApplied tan-sum2.2
rmApplied flip--2.2
Applied associate-/r/2.2
Applied fma-neg2.2
rmApplied swap-sqr2.2
rmApplied add-cbrt-cube2.3
Applied add-cbrt-cube2.3
Applied cbrt-unprod2.3
Simplified2.3
if -1.9500134694671836e-38 < eps < 2.855628566329288e-18Initial program 45.9
Taylor expanded around 0 31.4
Simplified31.4
Final simplification15.6
herbie shell --seed 2020047 +o rules:numerics
(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)))