Average Error: 36.7 → 15.5
Time: 31.4s
Precision: 64
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -5.421325500005225 \cdot 10^{-61}:\\ \;\;\;\;\mathsf{fma}\left(\frac{\tan \varepsilon + \tan x}{1 - \frac{\left(\tan \varepsilon \cdot \sin x\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}{\cos x}}, \tan x \cdot \tan \varepsilon + 1, -\tan x\right)\\ \mathbf{elif}\;\varepsilon \le 5.810306508670788 \cdot 10^{-52}:\\ \;\;\;\;\mathsf{fma}\left(x \cdot \varepsilon, x + \varepsilon, \varepsilon\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\tan \varepsilon + \tan x, \frac{1}{1 - \tan x \cdot \tan \varepsilon}, -\tan x\right)\\ \end{array}\]
\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -5.421325500005225 \cdot 10^{-61}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\tan \varepsilon + \tan x}{1 - \frac{\left(\tan \varepsilon \cdot \sin x\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}{\cos x}}, \tan x \cdot \tan \varepsilon + 1, -\tan x\right)\\

\mathbf{elif}\;\varepsilon \le 5.810306508670788 \cdot 10^{-52}:\\
\;\;\;\;\mathsf{fma}\left(x \cdot \varepsilon, x + \varepsilon, \varepsilon\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\tan \varepsilon + \tan x, \frac{1}{1 - \tan x \cdot \tan \varepsilon}, -\tan x\right)\\

\end{array}
double f(double x, double eps) {
        double r2720263 = x;
        double r2720264 = eps;
        double r2720265 = r2720263 + r2720264;
        double r2720266 = tan(r2720265);
        double r2720267 = tan(r2720263);
        double r2720268 = r2720266 - r2720267;
        return r2720268;
}

double f(double x, double eps) {
        double r2720269 = eps;
        double r2720270 = -5.421325500005225e-61;
        bool r2720271 = r2720269 <= r2720270;
        double r2720272 = tan(r2720269);
        double r2720273 = x;
        double r2720274 = tan(r2720273);
        double r2720275 = r2720272 + r2720274;
        double r2720276 = 1.0;
        double r2720277 = sin(r2720273);
        double r2720278 = r2720272 * r2720277;
        double r2720279 = r2720274 * r2720272;
        double r2720280 = r2720278 * r2720279;
        double r2720281 = cos(r2720273);
        double r2720282 = r2720280 / r2720281;
        double r2720283 = r2720276 - r2720282;
        double r2720284 = r2720275 / r2720283;
        double r2720285 = r2720279 + r2720276;
        double r2720286 = -r2720274;
        double r2720287 = fma(r2720284, r2720285, r2720286);
        double r2720288 = 5.810306508670788e-52;
        bool r2720289 = r2720269 <= r2720288;
        double r2720290 = r2720273 * r2720269;
        double r2720291 = r2720273 + r2720269;
        double r2720292 = fma(r2720290, r2720291, r2720269);
        double r2720293 = r2720276 - r2720279;
        double r2720294 = r2720276 / r2720293;
        double r2720295 = fma(r2720275, r2720294, r2720286);
        double r2720296 = r2720289 ? r2720292 : r2720295;
        double r2720297 = r2720271 ? r2720287 : r2720296;
        return r2720297;
}

Error

Bits error versus x

Bits error versus eps

Target

Original36.7
Target14.9
Herbie15.5
\[\frac{\sin \varepsilon}{\cos x \cdot \cos \left(x + \varepsilon\right)}\]

Derivation

  1. Split input into 3 regimes
  2. if eps < -5.421325500005225e-61

    1. Initial program 30.4

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

      \[\leadsto \color{blue}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon}} - \tan x\]
    4. Using strategy rm
    5. Applied flip--5.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/5.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-neg5.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 tan-quot5.2

      \[\leadsto \mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 \cdot 1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\color{blue}{\frac{\sin x}{\cos x}} \cdot \tan \varepsilon\right)}, 1 + \tan x \cdot \tan \varepsilon, -\tan x\right)\]
    10. Applied associate-*l/5.2

      \[\leadsto \mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 \cdot 1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \color{blue}{\frac{\sin x \cdot \tan \varepsilon}{\cos x}}}, 1 + \tan x \cdot \tan \varepsilon, -\tan x\right)\]
    11. Applied associate-*r/5.2

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

    if -5.421325500005225e-61 < eps < 5.810306508670788e-52

    1. Initial program 47.0

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

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(x \cdot \varepsilon, \varepsilon + x, \varepsilon\right)}\]

    if 5.810306508670788e-52 < eps

    1. Initial program 29.1

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

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

      \[\leadsto \color{blue}{\left(\tan x + \tan \varepsilon\right) \cdot \frac{1}{1 - \tan x \cdot \tan \varepsilon}} - \tan x\]
    6. Applied fma-neg3.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -5.421325500005225 \cdot 10^{-61}:\\ \;\;\;\;\mathsf{fma}\left(\frac{\tan \varepsilon + \tan x}{1 - \frac{\left(\tan \varepsilon \cdot \sin x\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}{\cos x}}, \tan x \cdot \tan \varepsilon + 1, -\tan x\right)\\ \mathbf{elif}\;\varepsilon \le 5.810306508670788 \cdot 10^{-52}:\\ \;\;\;\;\mathsf{fma}\left(x \cdot \varepsilon, x + \varepsilon, \varepsilon\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\tan \varepsilon + \tan x, \frac{1}{1 - \tan x \cdot \tan \varepsilon}, -\tan x\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019168 +o rules:numerics
(FPCore (x eps)
  :name "2tan (problem 3.3.2)"

  :herbie-target
  (/ (sin eps) (* (cos x) (cos (+ x eps))))

  (- (tan (+ x eps)) (tan x)))