Average Error: 37.4 → 15.6
Time: 13.7s
Precision: 64
\[\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}\]
\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;
}

Error

Bits error versus x

Bits error versus eps

Target

Original37.4
Target15.2
Herbie15.6
\[\frac{\sin \varepsilon}{\cos x \cdot \cos \left(x + \varepsilon\right)}\]

Derivation

  1. Split input into 2 regimes
  2. if eps < -1.9500134694671836e-38 or 2.855628566329288e-18 < eps

    1. Initial program 30.2

      \[\tan \left(x + \varepsilon\right) - \tan x\]
    2. Using strategy rm
    3. Applied tan-sum2.2

      \[\leadsto \color{blue}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon}} - \tan x\]
    4. Using strategy rm
    5. Applied flip--2.2

      \[\leadsto \frac{\tan x + \tan \varepsilon}{\color{blue}{\frac{1 \cdot 1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}{1 + \tan x \cdot \tan \varepsilon}}} - \tan x\]
    6. Applied associate-/r/2.2

      \[\leadsto \color{blue}{\frac{\tan x + \tan \varepsilon}{1 \cdot 1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)} \cdot \left(1 + \tan x \cdot \tan \varepsilon\right)} - \tan x\]
    7. Applied fma-neg2.2

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 \cdot 1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}, 1 + \tan x \cdot \tan \varepsilon, -\tan x\right)}\]
    8. Using strategy rm
    9. Applied swap-sqr2.2

      \[\leadsto \mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 \cdot 1 - \color{blue}{\left(\tan x \cdot \tan x\right) \cdot \left(\tan \varepsilon \cdot \tan \varepsilon\right)}}, 1 + \tan x \cdot \tan \varepsilon, -\tan x\right)\]
    10. Using strategy rm
    11. Applied add-cbrt-cube2.3

      \[\leadsto \mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 \cdot 1 - \left(\tan x \cdot \tan x\right) \cdot \left(\tan \varepsilon \cdot \color{blue}{\sqrt[3]{\left(\tan \varepsilon \cdot \tan \varepsilon\right) \cdot \tan \varepsilon}}\right)}, 1 + \tan x \cdot \tan \varepsilon, -\tan x\right)\]
    12. Applied add-cbrt-cube2.3

      \[\leadsto \mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 \cdot 1 - \left(\tan x \cdot \tan x\right) \cdot \left(\color{blue}{\sqrt[3]{\left(\tan \varepsilon \cdot \tan \varepsilon\right) \cdot \tan \varepsilon}} \cdot \sqrt[3]{\left(\tan \varepsilon \cdot \tan \varepsilon\right) \cdot \tan \varepsilon}\right)}, 1 + \tan x \cdot \tan \varepsilon, -\tan x\right)\]
    13. Applied cbrt-unprod2.3

      \[\leadsto \mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 \cdot 1 - \left(\tan x \cdot \tan x\right) \cdot \color{blue}{\sqrt[3]{\left(\left(\tan \varepsilon \cdot \tan \varepsilon\right) \cdot \tan \varepsilon\right) \cdot \left(\left(\tan \varepsilon \cdot \tan \varepsilon\right) \cdot \tan \varepsilon\right)}}}, 1 + \tan x \cdot \tan \varepsilon, -\tan x\right)\]
    14. Simplified2.3

      \[\leadsto \mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 \cdot 1 - \left(\tan x \cdot \tan x\right) \cdot \sqrt[3]{\color{blue}{{\left(\tan \varepsilon \cdot \tan \varepsilon\right)}^{3}}}}, 1 + \tan x \cdot \tan \varepsilon, -\tan x\right)\]

    if -1.9500134694671836e-38 < eps < 2.855628566329288e-18

    1. Initial program 45.9

      \[\tan \left(x + \varepsilon\right) - \tan x\]
    2. Taylor expanded around 0 31.4

      \[\leadsto \color{blue}{x \cdot {\varepsilon}^{2} + \left(\varepsilon + {x}^{2} \cdot \varepsilon\right)}\]
    3. Simplified31.4

      \[\leadsto \color{blue}{\varepsilon \cdot \left(\mathsf{fma}\left(x, x, 1\right) + \varepsilon \cdot x\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification15.6

    \[\leadsto \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}\]

Reproduce

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)))