Average Error: 37.4 → 15.4
Time: 43.9s
Precision: 64
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -7.812094276090538 \cdot 10^{-18}:\\ \;\;\;\;\mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \left(\tan x \cdot \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}\right)}, 1 + \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}, -\tan x\right)\\ \mathbf{elif}\;\varepsilon \le 4.367505480077063 \cdot 10^{-68}:\\ \;\;\;\;\mathsf{fma}\left(x, \varepsilon \cdot \left(x + \varepsilon\right), \varepsilon\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \left(\tan x \cdot \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}\right)}, 1 + \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}, -\tan x\right)\\ \end{array}\]
\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -7.812094276090538 \cdot 10^{-18}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \left(\tan x \cdot \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}\right)}, 1 + \frac{\sin \varepsilon \cdot \tan x}{\cos \varepsilon}, -\tan x\right)\\

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

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

\end{array}
double f(double x, double eps) {
        double r3163959 = x;
        double r3163960 = eps;
        double r3163961 = r3163959 + r3163960;
        double r3163962 = tan(r3163961);
        double r3163963 = tan(r3163959);
        double r3163964 = r3163962 - r3163963;
        return r3163964;
}

double f(double x, double eps) {
        double r3163965 = eps;
        double r3163966 = -7.812094276090538e-18;
        bool r3163967 = r3163965 <= r3163966;
        double r3163968 = x;
        double r3163969 = tan(r3163968);
        double r3163970 = tan(r3163965);
        double r3163971 = r3163969 + r3163970;
        double r3163972 = 1.0;
        double r3163973 = sin(r3163965);
        double r3163974 = cos(r3163965);
        double r3163975 = r3163973 / r3163974;
        double r3163976 = r3163973 * r3163969;
        double r3163977 = r3163976 / r3163974;
        double r3163978 = r3163969 * r3163977;
        double r3163979 = r3163975 * r3163978;
        double r3163980 = r3163972 - r3163979;
        double r3163981 = r3163971 / r3163980;
        double r3163982 = r3163972 + r3163977;
        double r3163983 = -r3163969;
        double r3163984 = fma(r3163981, r3163982, r3163983);
        double r3163985 = 4.367505480077063e-68;
        bool r3163986 = r3163965 <= r3163985;
        double r3163987 = r3163968 + r3163965;
        double r3163988 = r3163965 * r3163987;
        double r3163989 = fma(r3163968, r3163988, r3163965);
        double r3163990 = r3163986 ? r3163989 : r3163984;
        double r3163991 = r3163967 ? r3163984 : r3163990;
        return r3163991;
}

Error

Bits error versus x

Bits error versus eps

Target

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

Derivation

  1. Split input into 2 regimes
  2. if eps < -7.812094276090538e-18 or 4.367505480077063e-68 < eps

    1. Initial program 30.4

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

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

      \[\leadsto \frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}}} - \tan x\]
    6. Applied associate-*r/3.5

      \[\leadsto \frac{\tan x + \tan \varepsilon}{1 - \color{blue}{\frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}}} - \tan x\]
    7. Using strategy rm
    8. Applied flip--3.5

      \[\leadsto \frac{\tan x + \tan \varepsilon}{\color{blue}{\frac{1 \cdot 1 - \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon} \cdot \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}}{1 + \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}}}} - \tan x\]
    9. Applied associate-/r/3.5

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{\tan x + \tan \varepsilon}{1 \cdot 1 - \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon} \cdot \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}}, 1 + \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}, -\tan x\right)}\]
    11. Using strategy rm
    12. Applied *-un-lft-identity3.5

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

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

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

    if -7.812094276090538e-18 < eps < 4.367505480077063e-68

    1. Initial program 46.6

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

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

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

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

Reproduce

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