Average Error: 37.1 → 14.2
Time: 2.1m
Precision: 64
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -9.69392132933039565502310610566995512653 \cdot 10^{-53}:\\ \;\;\;\;\frac{\frac{\left(\tan \varepsilon + \tan x\right) \cdot \left(\tan x - \tan \varepsilon\right)}{\tan x - \tan \varepsilon}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos x}} - \tan x\\ \mathbf{elif}\;\varepsilon \le 1.171008892783406389439750823648814644065 \cdot 10^{-92}:\\ \;\;\;\;\varepsilon + \left(x + \frac{1}{3} \cdot \varepsilon\right) \cdot \left(\varepsilon \cdot \varepsilon\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\tan \varepsilon + \tan x\right) \cdot \cos x - \sin x \cdot \left(1 - \tan \varepsilon \cdot \tan x\right)}{\cos x \cdot \left(1 - \tan \varepsilon \cdot \tan x\right)}\\ \end{array}\]
\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -9.69392132933039565502310610566995512653 \cdot 10^{-53}:\\
\;\;\;\;\frac{\frac{\left(\tan \varepsilon + \tan x\right) \cdot \left(\tan x - \tan \varepsilon\right)}{\tan x - \tan \varepsilon}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos x}} - \tan x\\

\mathbf{elif}\;\varepsilon \le 1.171008892783406389439750823648814644065 \cdot 10^{-92}:\\
\;\;\;\;\varepsilon + \left(x + \frac{1}{3} \cdot \varepsilon\right) \cdot \left(\varepsilon \cdot \varepsilon\right)\\

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

\end{array}
double f(double x, double eps) {
        double r5428454 = x;
        double r5428455 = eps;
        double r5428456 = r5428454 + r5428455;
        double r5428457 = tan(r5428456);
        double r5428458 = tan(r5428454);
        double r5428459 = r5428457 - r5428458;
        return r5428459;
}

double f(double x, double eps) {
        double r5428460 = eps;
        double r5428461 = -9.693921329330396e-53;
        bool r5428462 = r5428460 <= r5428461;
        double r5428463 = tan(r5428460);
        double r5428464 = x;
        double r5428465 = tan(r5428464);
        double r5428466 = r5428463 + r5428465;
        double r5428467 = r5428465 - r5428463;
        double r5428468 = r5428466 * r5428467;
        double r5428469 = r5428468 / r5428467;
        double r5428470 = 1.0;
        double r5428471 = sin(r5428464);
        double r5428472 = sin(r5428460);
        double r5428473 = r5428471 * r5428472;
        double r5428474 = cos(r5428460);
        double r5428475 = cos(r5428464);
        double r5428476 = r5428474 * r5428475;
        double r5428477 = r5428473 / r5428476;
        double r5428478 = r5428470 - r5428477;
        double r5428479 = r5428469 / r5428478;
        double r5428480 = r5428479 - r5428465;
        double r5428481 = 1.1710088927834064e-92;
        bool r5428482 = r5428460 <= r5428481;
        double r5428483 = 0.3333333333333333;
        double r5428484 = r5428483 * r5428460;
        double r5428485 = r5428464 + r5428484;
        double r5428486 = r5428460 * r5428460;
        double r5428487 = r5428485 * r5428486;
        double r5428488 = r5428460 + r5428487;
        double r5428489 = r5428466 * r5428475;
        double r5428490 = r5428463 * r5428465;
        double r5428491 = r5428470 - r5428490;
        double r5428492 = r5428471 * r5428491;
        double r5428493 = r5428489 - r5428492;
        double r5428494 = r5428475 * r5428491;
        double r5428495 = r5428493 / r5428494;
        double r5428496 = r5428482 ? r5428488 : r5428495;
        double r5428497 = r5428462 ? r5428480 : r5428496;
        return r5428497;
}

Error

Bits error versus x

Bits error versus eps

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

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

Derivation

  1. Split input into 3 regimes
  2. if eps < -9.693921329330396e-53

    1. Initial program 29.9

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

      \[\leadsto \color{blue}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon}} - \tan x\]
    4. Taylor expanded around inf 4.2

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

      \[\leadsto \frac{\color{blue}{\frac{\tan x \cdot \tan x - \tan \varepsilon \cdot \tan \varepsilon}{\tan x - \tan \varepsilon}}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos x}} - \tan x\]
    7. Simplified4.2

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

    if -9.693921329330396e-53 < eps < 1.1710088927834064e-92

    1. Initial program 47.8

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

      \[\leadsto \color{blue}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon}} - \tan x\]
    4. Taylor expanded around inf 48.0

      \[\leadsto \frac{\color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon} + \frac{\sin x}{\cos x}}}{1 - \tan x \cdot \tan \varepsilon} - \tan x\]
    5. Taylor expanded around 0 27.6

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

      \[\leadsto \color{blue}{\varepsilon + \left(\varepsilon \cdot \varepsilon\right) \cdot \left(\frac{1}{3} \cdot \varepsilon + x\right)}\]

    if 1.1710088927834064e-92 < eps

    1. Initial program 30.8

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

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

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

      \[\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}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification14.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -9.69392132933039565502310610566995512653 \cdot 10^{-53}:\\ \;\;\;\;\frac{\frac{\left(\tan \varepsilon + \tan x\right) \cdot \left(\tan x - \tan \varepsilon\right)}{\tan x - \tan \varepsilon}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos x}} - \tan x\\ \mathbf{elif}\;\varepsilon \le 1.171008892783406389439750823648814644065 \cdot 10^{-92}:\\ \;\;\;\;\varepsilon + \left(x + \frac{1}{3} \cdot \varepsilon\right) \cdot \left(\varepsilon \cdot \varepsilon\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\tan \varepsilon + \tan x\right) \cdot \cos x - \sin x \cdot \left(1 - \tan \varepsilon \cdot \tan x\right)}{\cos x \cdot \left(1 - \tan \varepsilon \cdot \tan x\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019200 
(FPCore (x eps)
  :name "2tan (problem 3.3.2)"

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

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