Average Error: 36.3 → 12.9
Time: 54.6s
Precision: 64
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos x}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin x}{\cos x}} - \frac{\sin x}{\cos x}\right)\]
\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos x}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin x}{\cos x}} - \frac{\sin x}{\cos x}\right)
double f(double x, double eps) {
        double r4797012 = x;
        double r4797013 = eps;
        double r4797014 = r4797012 + r4797013;
        double r4797015 = tan(r4797014);
        double r4797016 = tan(r4797012);
        double r4797017 = r4797015 - r4797016;
        return r4797017;
}

double f(double x, double eps) {
        double r4797018 = eps;
        double r4797019 = sin(r4797018);
        double r4797020 = cos(r4797018);
        double r4797021 = r4797019 / r4797020;
        double r4797022 = 1.0;
        double r4797023 = x;
        double r4797024 = sin(r4797023);
        double r4797025 = r4797024 * r4797019;
        double r4797026 = cos(r4797023);
        double r4797027 = r4797020 * r4797026;
        double r4797028 = r4797025 / r4797027;
        double r4797029 = r4797022 - r4797028;
        double r4797030 = r4797021 / r4797029;
        double r4797031 = r4797024 / r4797026;
        double r4797032 = r4797021 * r4797031;
        double r4797033 = r4797022 - r4797032;
        double r4797034 = r4797031 / r4797033;
        double r4797035 = r4797034 - r4797031;
        double r4797036 = r4797030 + r4797035;
        return r4797036;
}

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.3
Target14.7
Herbie12.9
\[\frac{\sin \varepsilon}{\cos x \cdot \cos \left(x + \varepsilon\right)}\]

Derivation

  1. Initial program 36.3

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

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

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

    \[\leadsto \color{blue}{\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin x}{\cos x} \cdot \frac{\sin \varepsilon}{\cos \varepsilon}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin x}{\cos x} \cdot \frac{\sin \varepsilon}{\cos \varepsilon}} - \frac{\sin x}{\cos x}\right)}\]
  6. Using strategy rm
  7. Applied add-log-exp12.9

    \[\leadsto \frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \color{blue}{\log \left(e^{\frac{\sin x}{\cos x} \cdot \frac{\sin \varepsilon}{\cos \varepsilon}}\right)}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin x}{\cos x} \cdot \frac{\sin \varepsilon}{\cos \varepsilon}} - \frac{\sin x}{\cos x}\right)\]
  8. Taylor expanded around -inf 12.9

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

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

Reproduce

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