Average Error: 37.1 → 15.4
Time: 29.6s
Precision: 64
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -6.095793693328762137298872934344524249228 \cdot 10^{-10}:\\ \;\;\;\;\frac{\cos x \cdot \left(\tan \varepsilon + \tan x\right) - \left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \sin x}{\left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \cos x}\\ \mathbf{elif}\;\varepsilon \le 5.041570059440357903617497466096972283453 \cdot 10^{-35}:\\ \;\;\;\;\mathsf{fma}\left(x \cdot \varepsilon, x + \varepsilon, \varepsilon\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{{\left(\tan \varepsilon\right)}^{3} + {\left(\tan x\right)}^{3}}{\mathsf{fma}\left(\tan \varepsilon - \tan x, \tan \varepsilon, \tan x \cdot \tan x\right) \cdot \left(1 - \tan x \cdot \tan \varepsilon\right)} - \tan x\\ \end{array}\]
\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -6.095793693328762137298872934344524249228 \cdot 10^{-10}:\\
\;\;\;\;\frac{\cos x \cdot \left(\tan \varepsilon + \tan x\right) - \left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \sin x}{\left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \cos x}\\

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

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

\end{array}
double f(double x, double eps) {
        double r6506749 = x;
        double r6506750 = eps;
        double r6506751 = r6506749 + r6506750;
        double r6506752 = tan(r6506751);
        double r6506753 = tan(r6506749);
        double r6506754 = r6506752 - r6506753;
        return r6506754;
}

double f(double x, double eps) {
        double r6506755 = eps;
        double r6506756 = -6.095793693328762e-10;
        bool r6506757 = r6506755 <= r6506756;
        double r6506758 = x;
        double r6506759 = cos(r6506758);
        double r6506760 = tan(r6506755);
        double r6506761 = tan(r6506758);
        double r6506762 = r6506760 + r6506761;
        double r6506763 = r6506759 * r6506762;
        double r6506764 = 1.0;
        double r6506765 = r6506761 * r6506760;
        double r6506766 = r6506764 - r6506765;
        double r6506767 = sin(r6506758);
        double r6506768 = r6506766 * r6506767;
        double r6506769 = r6506763 - r6506768;
        double r6506770 = r6506766 * r6506759;
        double r6506771 = r6506769 / r6506770;
        double r6506772 = 5.041570059440358e-35;
        bool r6506773 = r6506755 <= r6506772;
        double r6506774 = r6506758 * r6506755;
        double r6506775 = r6506758 + r6506755;
        double r6506776 = fma(r6506774, r6506775, r6506755);
        double r6506777 = 3.0;
        double r6506778 = pow(r6506760, r6506777);
        double r6506779 = pow(r6506761, r6506777);
        double r6506780 = r6506778 + r6506779;
        double r6506781 = r6506760 - r6506761;
        double r6506782 = r6506761 * r6506761;
        double r6506783 = fma(r6506781, r6506760, r6506782);
        double r6506784 = r6506783 * r6506766;
        double r6506785 = r6506780 / r6506784;
        double r6506786 = r6506785 - r6506761;
        double r6506787 = r6506773 ? r6506776 : r6506786;
        double r6506788 = r6506757 ? r6506771 : r6506787;
        return r6506788;
}

Error

Bits error versus x

Bits error versus eps

Target

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

Derivation

  1. Split input into 3 regimes
  2. if eps < -6.095793693328762e-10

    1. Initial program 30.2

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

      \[\leadsto \tan \left(x + \varepsilon\right) - \color{blue}{\frac{\sin x}{\cos x}}\]
    4. Applied tan-sum0.6

      \[\leadsto \color{blue}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon}} - \frac{\sin x}{\cos x}\]
    5. Applied frac-sub0.6

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

    if -6.095793693328762e-10 < eps < 5.041570059440358e-35

    1. Initial program 45.1

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

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

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

    if 5.041570059440358e-35 < eps

    1. Initial program 30.0

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

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

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

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

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

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

Reproduce

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