Average Error: 37.0 → 0.4
Time: 2.3m
Precision: 64
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -6.03166186485173 \cdot 10^{-09}:\\ \;\;\;\;\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 + 1\right), \left(-\tan x\right)\right)\\ \mathbf{elif}\;\varepsilon \le 1.1518020933864138 \cdot 10^{-08}:\\ \;\;\;\;\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) + \left(\tan x - \tan x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right)}\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)\\ \end{array}\]
\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -6.03166186485173 \cdot 10^{-09}:\\
\;\;\;\;\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 + 1\right), \left(-\tan x\right)\right)\\

\mathbf{elif}\;\varepsilon \le 1.1518020933864138 \cdot 10^{-08}:\\
\;\;\;\;\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) + \left(\tan x - \tan x\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right)}\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)\\

\end{array}
double f(double x, double eps) {
        double r13518007 = x;
        double r13518008 = eps;
        double r13518009 = r13518007 + r13518008;
        double r13518010 = tan(r13518009);
        double r13518011 = tan(r13518007);
        double r13518012 = r13518010 - r13518011;
        return r13518012;
}

double f(double x, double eps) {
        double r13518013 = eps;
        double r13518014 = -6.03166186485173e-09;
        bool r13518015 = r13518013 <= r13518014;
        double r13518016 = tan(r13518013);
        double r13518017 = x;
        double r13518018 = tan(r13518017);
        double r13518019 = r13518016 + r13518018;
        double r13518020 = 1.0;
        double r13518021 = r13518018 * r13518016;
        double r13518022 = r13518021 * r13518021;
        double r13518023 = r13518020 - r13518022;
        double r13518024 = r13518019 / r13518023;
        double r13518025 = r13518021 + r13518020;
        double r13518026 = -r13518018;
        double r13518027 = fma(r13518024, r13518025, r13518026);
        double r13518028 = 1.1518020933864138e-08;
        bool r13518029 = r13518013 <= r13518028;
        double r13518030 = 0.13333333333333333;
        double r13518031 = 5.0;
        double r13518032 = pow(r13518013, r13518031);
        double r13518033 = r13518013 * r13518013;
        double r13518034 = 0.3333333333333333;
        double r13518035 = r13518013 * r13518034;
        double r13518036 = fma(r13518033, r13518035, r13518013);
        double r13518037 = fma(r13518030, r13518032, r13518036);
        double r13518038 = fma(r13518024, r13518021, r13518037);
        double r13518039 = r13518018 - r13518018;
        double r13518040 = r13518038 + r13518039;
        double r13518041 = r13518021 * r13518022;
        double r13518042 = r13518020 - r13518041;
        double r13518043 = r13518019 / r13518042;
        double r13518044 = r13518022 + r13518021;
        double r13518045 = r13518044 + r13518020;
        double r13518046 = fma(r13518043, r13518045, r13518026);
        double r13518047 = r13518029 ? r13518040 : r13518046;
        double r13518048 = r13518015 ? r13518027 : r13518047;
        return r13518048;
}

Error

Bits error versus x

Bits error versus eps

Target

Original37.0
Target15.5
Herbie0.4
\[\frac{\sin \varepsilon}{\cos x \cdot \cos \left(x + \varepsilon\right)}\]

Derivation

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

    1. Initial program 29.7

      \[\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.5

      \[\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/0.5

      \[\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-neg0.5

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

    if -6.03166186485173e-09 < eps < 1.1518020933864138e-08

    1. Initial program 44.7

      \[\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.8

      \[\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.8

      \[\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 1.1518020933864138e-08 < eps

    1. Initial program 30.2

      \[\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)}\]
    8. Simplified0.5

      \[\leadsto \mathsf{fma}\left(\color{blue}{\left(\frac{\tan x + \tan \varepsilon}{1 - \left(\left(\tan \varepsilon \cdot \tan x\right) \cdot \left(\tan \varepsilon \cdot \tan x\right)\right) \cdot \left(\tan \varepsilon \cdot \tan x\right)}\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)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -6.03166186485173 \cdot 10^{-09}:\\ \;\;\;\;\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 + 1\right), \left(-\tan x\right)\right)\\ \mathbf{elif}\;\varepsilon \le 1.1518020933864138 \cdot 10^{-08}:\\ \;\;\;\;\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) + \left(\tan x - \tan x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right)}\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)\\ \end{array}\]

Reproduce

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