Average Error: 36.4 → 15.7
Time: 28.5s
Precision: 64
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -4.284746753953384226458203300782990805007 \cdot 10^{-10}:\\ \;\;\;\;\frac{\tan x + \tan \varepsilon}{\frac{1 - \frac{{\left(\sin x\right)}^{2} \cdot \sin \varepsilon}{\cos \varepsilon \cdot {\left(\cos x\right)}^{2}} \cdot \tan \varepsilon}{1 + \tan x \cdot \tan \varepsilon}} - \tan x\\ \mathbf{elif}\;\varepsilon \le 3.283557063273864622345514890573875193278 \cdot 10^{-29}:\\ \;\;\;\;\varepsilon + \varepsilon \cdot \left(x \cdot \left(\varepsilon + x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{\sin x}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \cos x} + \frac{\sin \varepsilon}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \cos \varepsilon}\right) - \frac{\sin x}{\cos x}\\ \end{array}\]
\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.284746753953384226458203300782990805007 \cdot 10^{-10}:\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{\frac{1 - \frac{{\left(\sin x\right)}^{2} \cdot \sin \varepsilon}{\cos \varepsilon \cdot {\left(\cos x\right)}^{2}} \cdot \tan \varepsilon}{1 + \tan x \cdot \tan \varepsilon}} - \tan x\\

\mathbf{elif}\;\varepsilon \le 3.283557063273864622345514890573875193278 \cdot 10^{-29}:\\
\;\;\;\;\varepsilon + \varepsilon \cdot \left(x \cdot \left(\varepsilon + x\right)\right)\\

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

\end{array}
double f(double x, double eps) {
        double r110379 = x;
        double r110380 = eps;
        double r110381 = r110379 + r110380;
        double r110382 = tan(r110381);
        double r110383 = tan(r110379);
        double r110384 = r110382 - r110383;
        return r110384;
}

double f(double x, double eps) {
        double r110385 = eps;
        double r110386 = -4.284746753953384e-10;
        bool r110387 = r110385 <= r110386;
        double r110388 = x;
        double r110389 = tan(r110388);
        double r110390 = tan(r110385);
        double r110391 = r110389 + r110390;
        double r110392 = 1.0;
        double r110393 = sin(r110388);
        double r110394 = 2.0;
        double r110395 = pow(r110393, r110394);
        double r110396 = sin(r110385);
        double r110397 = r110395 * r110396;
        double r110398 = cos(r110385);
        double r110399 = cos(r110388);
        double r110400 = pow(r110399, r110394);
        double r110401 = r110398 * r110400;
        double r110402 = r110397 / r110401;
        double r110403 = r110402 * r110390;
        double r110404 = r110392 - r110403;
        double r110405 = r110389 * r110390;
        double r110406 = r110392 + r110405;
        double r110407 = r110404 / r110406;
        double r110408 = r110391 / r110407;
        double r110409 = r110408 - r110389;
        double r110410 = 3.2835570632738646e-29;
        bool r110411 = r110385 <= r110410;
        double r110412 = r110385 + r110388;
        double r110413 = r110388 * r110412;
        double r110414 = r110385 * r110413;
        double r110415 = r110385 + r110414;
        double r110416 = r110393 * r110396;
        double r110417 = r110399 * r110398;
        double r110418 = r110416 / r110417;
        double r110419 = r110392 - r110418;
        double r110420 = r110419 * r110399;
        double r110421 = r110393 / r110420;
        double r110422 = r110419 * r110398;
        double r110423 = r110396 / r110422;
        double r110424 = r110421 + r110423;
        double r110425 = r110393 / r110399;
        double r110426 = r110424 - r110425;
        double r110427 = r110411 ? r110415 : r110426;
        double r110428 = r110387 ? r110409 : r110427;
        return r110428;
}

Error

Bits error versus x

Bits error versus eps

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original36.4
Target14.7
Herbie15.7
\[\frac{\sin \varepsilon}{\cos x \cdot \cos \left(x + \varepsilon\right)}\]

Derivation

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

    1. Initial program 28.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.6

      \[\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. Simplified0.6

      \[\leadsto \frac{\tan x + \tan \varepsilon}{\frac{\color{blue}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}}{1 + \tan x \cdot \tan \varepsilon}} - \tan x\]
    7. Using strategy rm
    8. Applied associate-*r*0.6

      \[\leadsto \frac{\tan x + \tan \varepsilon}{\frac{1 - \color{blue}{\left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \tan x\right) \cdot \tan \varepsilon}}{1 + \tan x \cdot \tan \varepsilon}} - \tan x\]
    9. Taylor expanded around inf 0.6

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

    if -4.284746753953384e-10 < eps < 3.2835570632738646e-29

    1. Initial program 45.0

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

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

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

    if 3.2835570632738646e-29 < eps

    1. Initial program 29.1

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

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

      \[\leadsto \color{blue}{\left(\frac{\sin x}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \cos x} + \frac{\sin \varepsilon}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \cos \varepsilon}\right) - \frac{\sin x}{\cos x}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification15.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -4.284746753953384226458203300782990805007 \cdot 10^{-10}:\\ \;\;\;\;\frac{\tan x + \tan \varepsilon}{\frac{1 - \frac{{\left(\sin x\right)}^{2} \cdot \sin \varepsilon}{\cos \varepsilon \cdot {\left(\cos x\right)}^{2}} \cdot \tan \varepsilon}{1 + \tan x \cdot \tan \varepsilon}} - \tan x\\ \mathbf{elif}\;\varepsilon \le 3.283557063273864622345514890573875193278 \cdot 10^{-29}:\\ \;\;\;\;\varepsilon + \varepsilon \cdot \left(x \cdot \left(\varepsilon + x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{\sin x}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \cos x} + \frac{\sin \varepsilon}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \cos \varepsilon}\right) - \frac{\sin x}{\cos x}\\ \end{array}\]

Reproduce

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

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

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