Average Error: 37.3 → 15.7
Time: 26.8s
Precision: 64
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -7.287696018930271589233211764394565863653 \cdot 10^{-45} \lor \neg \left(\varepsilon \le 3.567141279375676635666856121536066364286 \cdot 10^{-32}\right):\\ \;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \sqrt[3]{{\left(\tan x \cdot \tan \varepsilon\right)}^{3}}} - \tan x\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(x + \varepsilon\right) + \varepsilon\\ \end{array}\]
\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -7.287696018930271589233211764394565863653 \cdot 10^{-45} \lor \neg \left(\varepsilon \le 3.567141279375676635666856121536066364286 \cdot 10^{-32}\right):\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \sqrt[3]{{\left(\tan x \cdot \tan \varepsilon\right)}^{3}}} - \tan x\\

\mathbf{else}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(x + \varepsilon\right) + \varepsilon\\

\end{array}
double f(double x, double eps) {
        double r108648 = x;
        double r108649 = eps;
        double r108650 = r108648 + r108649;
        double r108651 = tan(r108650);
        double r108652 = tan(r108648);
        double r108653 = r108651 - r108652;
        return r108653;
}

double f(double x, double eps) {
        double r108654 = eps;
        double r108655 = -7.287696018930272e-45;
        bool r108656 = r108654 <= r108655;
        double r108657 = 3.5671412793756766e-32;
        bool r108658 = r108654 <= r108657;
        double r108659 = !r108658;
        bool r108660 = r108656 || r108659;
        double r108661 = x;
        double r108662 = tan(r108661);
        double r108663 = tan(r108654);
        double r108664 = r108662 + r108663;
        double r108665 = 1.0;
        double r108666 = r108662 * r108663;
        double r108667 = 3.0;
        double r108668 = pow(r108666, r108667);
        double r108669 = cbrt(r108668);
        double r108670 = r108665 - r108669;
        double r108671 = r108664 / r108670;
        double r108672 = r108671 - r108662;
        double r108673 = r108661 * r108654;
        double r108674 = r108661 + r108654;
        double r108675 = r108673 * r108674;
        double r108676 = r108675 + r108654;
        double r108677 = r108660 ? r108672 : r108676;
        return r108677;
}

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

Derivation

  1. Split input into 2 regimes
  2. if eps < -7.287696018930272e-45 or 3.5671412793756766e-32 < eps

    1. Initial program 30.4

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

      \[\leadsto \color{blue}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon}} - \tan x\]
    4. Using strategy rm
    5. Applied add-cbrt-cube3.2

      \[\leadsto \frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \color{blue}{\sqrt[3]{\left(\tan \varepsilon \cdot \tan \varepsilon\right) \cdot \tan \varepsilon}}} - \tan x\]
    6. Applied add-cbrt-cube3.2

      \[\leadsto \frac{\tan x + \tan \varepsilon}{1 - \color{blue}{\sqrt[3]{\left(\tan x \cdot \tan x\right) \cdot \tan x}} \cdot \sqrt[3]{\left(\tan \varepsilon \cdot \tan \varepsilon\right) \cdot \tan \varepsilon}} - \tan x\]
    7. Applied cbrt-unprod3.2

      \[\leadsto \frac{\tan x + \tan \varepsilon}{1 - \color{blue}{\sqrt[3]{\left(\left(\tan x \cdot \tan x\right) \cdot \tan x\right) \cdot \left(\left(\tan \varepsilon \cdot \tan \varepsilon\right) \cdot \tan \varepsilon\right)}}} - \tan x\]
    8. Simplified3.2

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

    if -7.287696018930272e-45 < eps < 3.5671412793756766e-32

    1. Initial program 46.5

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -7.287696018930271589233211764394565863653 \cdot 10^{-45} \lor \neg \left(\varepsilon \le 3.567141279375676635666856121536066364286 \cdot 10^{-32}\right):\\ \;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \sqrt[3]{{\left(\tan x \cdot \tan \varepsilon\right)}^{3}}} - \tan x\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(x + \varepsilon\right) + \varepsilon\\ \end{array}\]

Reproduce

herbie shell --seed 2019322 
(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)))