Average Error: 37.1 → 15.5
Time: 1.3m
Precision: 64
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -1.2876559687607358 \cdot 10^{-55}:\\ \;\;\;\;\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 3.284187801653348 \cdot 10^{-34}:\\ \;\;\;\;\varepsilon + \left(\varepsilon \cdot \left(x + \varepsilon\right)\right) \cdot x\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\tan x \cdot \tan x\right) \cdot \tan x + \tan \varepsilon \cdot \left(\tan \varepsilon \cdot \tan \varepsilon\right)}{\left(\left(\tan \varepsilon \cdot \tan \varepsilon - \tan x \cdot \tan \varepsilon\right) + \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 -1.2876559687607358 \cdot 10^{-55}:\\
\;\;\;\;\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 3.284187801653348 \cdot 10^{-34}:\\
\;\;\;\;\varepsilon + \left(\varepsilon \cdot \left(x + \varepsilon\right)\right) \cdot x\\

\mathbf{else}:\\
\;\;\;\;\frac{\left(\tan x \cdot \tan x\right) \cdot \tan x + \tan \varepsilon \cdot \left(\tan \varepsilon \cdot \tan \varepsilon\right)}{\left(\left(\tan \varepsilon \cdot \tan \varepsilon - \tan x \cdot \tan \varepsilon\right) + \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 r8740065 = x;
        double r8740066 = eps;
        double r8740067 = r8740065 + r8740066;
        double r8740068 = tan(r8740067);
        double r8740069 = tan(r8740065);
        double r8740070 = r8740068 - r8740069;
        return r8740070;
}

double f(double x, double eps) {
        double r8740071 = eps;
        double r8740072 = -1.2876559687607358e-55;
        bool r8740073 = r8740071 <= r8740072;
        double r8740074 = x;
        double r8740075 = cos(r8740074);
        double r8740076 = tan(r8740071);
        double r8740077 = tan(r8740074);
        double r8740078 = r8740076 + r8740077;
        double r8740079 = r8740075 * r8740078;
        double r8740080 = 1.0;
        double r8740081 = r8740077 * r8740076;
        double r8740082 = r8740080 - r8740081;
        double r8740083 = sin(r8740074);
        double r8740084 = r8740082 * r8740083;
        double r8740085 = r8740079 - r8740084;
        double r8740086 = r8740082 * r8740075;
        double r8740087 = r8740085 / r8740086;
        double r8740088 = 3.284187801653348e-34;
        bool r8740089 = r8740071 <= r8740088;
        double r8740090 = r8740074 + r8740071;
        double r8740091 = r8740071 * r8740090;
        double r8740092 = r8740091 * r8740074;
        double r8740093 = r8740071 + r8740092;
        double r8740094 = r8740077 * r8740077;
        double r8740095 = r8740094 * r8740077;
        double r8740096 = r8740076 * r8740076;
        double r8740097 = r8740076 * r8740096;
        double r8740098 = r8740095 + r8740097;
        double r8740099 = r8740096 - r8740081;
        double r8740100 = r8740099 + r8740094;
        double r8740101 = r8740100 * r8740082;
        double r8740102 = r8740098 / r8740101;
        double r8740103 = r8740102 - r8740077;
        double r8740104 = r8740089 ? r8740093 : r8740103;
        double r8740105 = r8740073 ? r8740087 : r8740104;
        return r8740105;
}

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.2
Herbie15.5
\[\frac{\sin \varepsilon}{\cos x \cdot \cos \left(x + \varepsilon\right)}\]

Derivation

  1. Split input into 3 regimes
  2. if eps < -1.2876559687607358e-55

    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-sum4.3

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

      \[\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 -1.2876559687607358e-55 < eps < 3.284187801653348e-34

    1. Initial program 46.5

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

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

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

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

    if 3.284187801653348e-34 < eps

    1. Initial program 29.2

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

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -1.2876559687607358 \cdot 10^{-55}:\\ \;\;\;\;\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 3.284187801653348 \cdot 10^{-34}:\\ \;\;\;\;\varepsilon + \left(\varepsilon \cdot \left(x + \varepsilon\right)\right) \cdot x\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(\tan x \cdot \tan x\right) \cdot \tan x + \tan \varepsilon \cdot \left(\tan \varepsilon \cdot \tan \varepsilon\right)}{\left(\left(\tan \varepsilon \cdot \tan \varepsilon - \tan x \cdot \tan \varepsilon\right) + \tan x \cdot \tan x\right) \cdot \left(1 - \tan x \cdot \tan \varepsilon\right)} - \tan x\\ \end{array}\]

Reproduce

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

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

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