Average Error: 37.2 → 0.4
Time: 2.0m
Precision: 64
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -8.124833377187032 \cdot 10^{-09}:\\ \;\;\;\;\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - {\left(\tan x \cdot \tan \varepsilon\right)}^{3}}\right), \left(\left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right) + \tan x \cdot \tan \varepsilon\right) + 1\right), \left(-\tan x\right)\right)\\ \mathbf{elif}\;\varepsilon \le 3.884792287835392 \cdot 10^{-09}:\\ \;\;\;\;\left(\tan x - \tan x\right) + \mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}\right), \left(\tan x \cdot \tan \varepsilon\right), \left(\mathsf{fma}\left(\frac{2}{15}, \left({\varepsilon}^{5}\right), \left(\mathsf{fma}\left(\left(\varepsilon \cdot \varepsilon\right), \left(\varepsilon \cdot \frac{1}{3}\right), \varepsilon\right)\right)\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\tan x \cdot \tan x - \tan \varepsilon \cdot \tan \varepsilon}{\left(\tan x - \tan \varepsilon\right) - \tan x \cdot \left(\tan \varepsilon \cdot \left(\tan x - \tan \varepsilon\right)\right)} - \tan x\\ \end{array}\]
\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.124833377187032 \cdot 10^{-09}:\\
\;\;\;\;\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - {\left(\tan x \cdot \tan \varepsilon\right)}^{3}}\right), \left(\left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right) + \tan x \cdot \tan \varepsilon\right) + 1\right), \left(-\tan x\right)\right)\\

\mathbf{elif}\;\varepsilon \le 3.884792287835392 \cdot 10^{-09}:\\
\;\;\;\;\left(\tan x - \tan x\right) + \mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}\right), \left(\tan x \cdot \tan \varepsilon\right), \left(\mathsf{fma}\left(\frac{2}{15}, \left({\varepsilon}^{5}\right), \left(\mathsf{fma}\left(\left(\varepsilon \cdot \varepsilon\right), \left(\varepsilon \cdot \frac{1}{3}\right), \varepsilon\right)\right)\right)\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\frac{\tan x \cdot \tan x - \tan \varepsilon \cdot \tan \varepsilon}{\left(\tan x - \tan \varepsilon\right) - \tan x \cdot \left(\tan \varepsilon \cdot \left(\tan x - \tan \varepsilon\right)\right)} - \tan x\\

\end{array}
double f(double x, double eps) {
        double r18928285 = x;
        double r18928286 = eps;
        double r18928287 = r18928285 + r18928286;
        double r18928288 = tan(r18928287);
        double r18928289 = tan(r18928285);
        double r18928290 = r18928288 - r18928289;
        return r18928290;
}

double f(double x, double eps) {
        double r18928291 = eps;
        double r18928292 = -8.124833377187032e-09;
        bool r18928293 = r18928291 <= r18928292;
        double r18928294 = tan(r18928291);
        double r18928295 = x;
        double r18928296 = tan(r18928295);
        double r18928297 = r18928294 + r18928296;
        double r18928298 = 1.0;
        double r18928299 = r18928296 * r18928294;
        double r18928300 = 3.0;
        double r18928301 = pow(r18928299, r18928300);
        double r18928302 = r18928298 - r18928301;
        double r18928303 = r18928297 / r18928302;
        double r18928304 = r18928299 * r18928299;
        double r18928305 = r18928304 + r18928299;
        double r18928306 = r18928305 + r18928298;
        double r18928307 = -r18928296;
        double r18928308 = fma(r18928303, r18928306, r18928307);
        double r18928309 = 3.884792287835392e-09;
        bool r18928310 = r18928291 <= r18928309;
        double r18928311 = r18928296 - r18928296;
        double r18928312 = r18928298 - r18928304;
        double r18928313 = r18928297 / r18928312;
        double r18928314 = 0.13333333333333333;
        double r18928315 = 5.0;
        double r18928316 = pow(r18928291, r18928315);
        double r18928317 = r18928291 * r18928291;
        double r18928318 = 0.3333333333333333;
        double r18928319 = r18928291 * r18928318;
        double r18928320 = fma(r18928317, r18928319, r18928291);
        double r18928321 = fma(r18928314, r18928316, r18928320);
        double r18928322 = fma(r18928313, r18928299, r18928321);
        double r18928323 = r18928311 + r18928322;
        double r18928324 = r18928296 * r18928296;
        double r18928325 = r18928294 * r18928294;
        double r18928326 = r18928324 - r18928325;
        double r18928327 = r18928296 - r18928294;
        double r18928328 = r18928294 * r18928327;
        double r18928329 = r18928296 * r18928328;
        double r18928330 = r18928327 - r18928329;
        double r18928331 = r18928326 / r18928330;
        double r18928332 = r18928331 - r18928296;
        double r18928333 = r18928310 ? r18928323 : r18928332;
        double r18928334 = r18928293 ? r18928308 : r18928333;
        return r18928334;
}

Error

Bits error versus x

Bits error versus eps

Target

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

Derivation

  1. Split input into 3 regimes
  2. if eps < -8.124833377187032e-09

    1. Initial program 29.4

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

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

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

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

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

    if -8.124833377187032e-09 < eps < 3.884792287835392e-09

    1. Initial program 44.8

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

      \[\leadsto \color{blue}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon}} - \tan x\]
    4. Using strategy rm
    5. Applied *-un-lft-identity44.4

      \[\leadsto \frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon} - \color{blue}{1 \cdot \tan x}\]
    6. Applied flip--44.4

      \[\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}}} - 1 \cdot \tan x\]
    7. Applied associate-/r/44.4

      \[\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)} - 1 \cdot \tan x\]
    8. Applied prod-diff44.4

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}\right), \left(\tan x \cdot \tan \varepsilon\right), \left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)} - \tan x\right)\right)} + \mathsf{fma}\left(\left(-\tan x\right), 1, \left(\tan x \cdot 1\right)\right)\]
    10. Simplified39.9

      \[\leadsto \mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}\right), \left(\tan x \cdot \tan \varepsilon\right), \left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)} - \tan x\right)\right) + \color{blue}{\left(\tan x - \tan x\right)}\]
    11. Taylor expanded around 0 0.3

      \[\leadsto \mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}\right), \left(\tan x \cdot \tan \varepsilon\right), \color{blue}{\left(\frac{1}{3} \cdot {\varepsilon}^{3} + \left(\frac{2}{15} \cdot {\varepsilon}^{5} + \varepsilon\right)\right)}\right) + \left(\tan x - \tan x\right)\]
    12. Simplified0.3

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

    if 3.884792287835392e-09 < eps

    1. Initial program 29.6

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

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

      \[\leadsto \frac{\color{blue}{\frac{\tan x \cdot \tan x - \tan \varepsilon \cdot \tan \varepsilon}{\tan x - \tan \varepsilon}}}{1 - \tan x \cdot \tan \varepsilon} - \tan x\]
    6. Applied associate-/l/0.6

      \[\leadsto \color{blue}{\frac{\tan x \cdot \tan x - \tan \varepsilon \cdot \tan \varepsilon}{\left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x - \tan \varepsilon\right)}} - \tan x\]
    7. Simplified0.6

      \[\leadsto \frac{\tan x \cdot \tan x - \tan \varepsilon \cdot \tan \varepsilon}{\color{blue}{\left(\tan x - \tan \varepsilon\right) - \tan x \cdot \left(\left(\tan x - \tan \varepsilon\right) \cdot \tan \varepsilon\right)}} - \tan x\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -8.124833377187032 \cdot 10^{-09}:\\ \;\;\;\;\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - {\left(\tan x \cdot \tan \varepsilon\right)}^{3}}\right), \left(\left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right) + \tan x \cdot \tan \varepsilon\right) + 1\right), \left(-\tan x\right)\right)\\ \mathbf{elif}\;\varepsilon \le 3.884792287835392 \cdot 10^{-09}:\\ \;\;\;\;\left(\tan x - \tan x\right) + \mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}\right), \left(\tan x \cdot \tan \varepsilon\right), \left(\mathsf{fma}\left(\frac{2}{15}, \left({\varepsilon}^{5}\right), \left(\mathsf{fma}\left(\left(\varepsilon \cdot \varepsilon\right), \left(\varepsilon \cdot \frac{1}{3}\right), \varepsilon\right)\right)\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\tan x \cdot \tan x - \tan \varepsilon \cdot \tan \varepsilon}{\left(\tan x - \tan \varepsilon\right) - \tan x \cdot \left(\tan \varepsilon \cdot \left(\tan x - \tan \varepsilon\right)\right)} - \tan x\\ \end{array}\]

Reproduce

herbie shell --seed 2019125 +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)))