?

Average Error: 36.9 → 14.0
Time: 1.3min
Precision: binary64
Cost: 26440

?

\[\tan \left(x + \varepsilon\right) - \tan x \]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \leq -1.28 \cdot 10^{-6}:\\ \;\;\;\;\frac{\sin \varepsilon}{\cos \varepsilon}\\ \mathbf{elif}\;\varepsilon \leq 2.7 \cdot 10^{-5}:\\ \;\;\;\;\frac{{\sin x}^{2} \cdot \varepsilon}{{\cos x}^{2}} + \varepsilon\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\cos \varepsilon} \cdot \sin \varepsilon\\ \end{array} \]
(FPCore (x eps) :precision binary64 (- (tan (+ x eps)) (tan x)))
(FPCore (x eps)
 :precision binary64
 (if (<= eps -1.28e-6)
   (/ (sin eps) (cos eps))
   (if (<= eps 2.7e-5)
     (+ (/ (* (pow (sin x) 2.0) eps) (pow (cos x) 2.0)) eps)
     (* (/ 1.0 (cos eps)) (sin eps)))))
double code(double x, double eps) {
	return tan((x + eps)) - tan(x);
}
double code(double x, double eps) {
	double tmp;
	if (eps <= -1.28e-6) {
		tmp = sin(eps) / cos(eps);
	} else if (eps <= 2.7e-5) {
		tmp = ((pow(sin(x), 2.0) * eps) / pow(cos(x), 2.0)) + eps;
	} else {
		tmp = (1.0 / cos(eps)) * sin(eps);
	}
	return tmp;
}
real(8) function code(x, eps)
    real(8), intent (in) :: x
    real(8), intent (in) :: eps
    code = tan((x + eps)) - tan(x)
end function
real(8) function code(x, eps)
    real(8), intent (in) :: x
    real(8), intent (in) :: eps
    real(8) :: tmp
    if (eps <= (-1.28d-6)) then
        tmp = sin(eps) / cos(eps)
    else if (eps <= 2.7d-5) then
        tmp = (((sin(x) ** 2.0d0) * eps) / (cos(x) ** 2.0d0)) + eps
    else
        tmp = (1.0d0 / cos(eps)) * sin(eps)
    end if
    code = tmp
end function
public static double code(double x, double eps) {
	return Math.tan((x + eps)) - Math.tan(x);
}
public static double code(double x, double eps) {
	double tmp;
	if (eps <= -1.28e-6) {
		tmp = Math.sin(eps) / Math.cos(eps);
	} else if (eps <= 2.7e-5) {
		tmp = ((Math.pow(Math.sin(x), 2.0) * eps) / Math.pow(Math.cos(x), 2.0)) + eps;
	} else {
		tmp = (1.0 / Math.cos(eps)) * Math.sin(eps);
	}
	return tmp;
}
def code(x, eps):
	return math.tan((x + eps)) - math.tan(x)
def code(x, eps):
	tmp = 0
	if eps <= -1.28e-6:
		tmp = math.sin(eps) / math.cos(eps)
	elif eps <= 2.7e-5:
		tmp = ((math.pow(math.sin(x), 2.0) * eps) / math.pow(math.cos(x), 2.0)) + eps
	else:
		tmp = (1.0 / math.cos(eps)) * math.sin(eps)
	return tmp
function code(x, eps)
	return Float64(tan(Float64(x + eps)) - tan(x))
end
function code(x, eps)
	tmp = 0.0
	if (eps <= -1.28e-6)
		tmp = Float64(sin(eps) / cos(eps));
	elseif (eps <= 2.7e-5)
		tmp = Float64(Float64(Float64((sin(x) ^ 2.0) * eps) / (cos(x) ^ 2.0)) + eps);
	else
		tmp = Float64(Float64(1.0 / cos(eps)) * sin(eps));
	end
	return tmp
end
function tmp = code(x, eps)
	tmp = tan((x + eps)) - tan(x);
end
function tmp_2 = code(x, eps)
	tmp = 0.0;
	if (eps <= -1.28e-6)
		tmp = sin(eps) / cos(eps);
	elseif (eps <= 2.7e-5)
		tmp = (((sin(x) ^ 2.0) * eps) / (cos(x) ^ 2.0)) + eps;
	else
		tmp = (1.0 / cos(eps)) * sin(eps);
	end
	tmp_2 = tmp;
end
code[x_, eps_] := N[(N[Tan[N[(x + eps), $MachinePrecision]], $MachinePrecision] - N[Tan[x], $MachinePrecision]), $MachinePrecision]
code[x_, eps_] := If[LessEqual[eps, -1.28e-6], N[(N[Sin[eps], $MachinePrecision] / N[Cos[eps], $MachinePrecision]), $MachinePrecision], If[LessEqual[eps, 2.7e-5], N[(N[(N[(N[Power[N[Sin[x], $MachinePrecision], 2.0], $MachinePrecision] * eps), $MachinePrecision] / N[Power[N[Cos[x], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] + eps), $MachinePrecision], N[(N[(1.0 / N[Cos[eps], $MachinePrecision]), $MachinePrecision] * N[Sin[eps], $MachinePrecision]), $MachinePrecision]]]
\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \leq -1.28 \cdot 10^{-6}:\\
\;\;\;\;\frac{\sin \varepsilon}{\cos \varepsilon}\\

\mathbf{elif}\;\varepsilon \leq 2.7 \cdot 10^{-5}:\\
\;\;\;\;\frac{{\sin x}^{2} \cdot \varepsilon}{{\cos x}^{2}} + \varepsilon\\

\mathbf{else}:\\
\;\;\;\;\frac{1}{\cos \varepsilon} \cdot \sin \varepsilon\\


\end{array}

Error?

Try it out?

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

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

Derivation?

  1. Split input into 3 regimes
  2. if eps < -1.28e-6

    1. Initial program 29.4

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

      \[\leadsto \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}} - \tan x \]
    3. Taylor expanded in x around 0 27.6

      \[\leadsto \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}} \]

    if -1.28e-6 < eps < 2.6999999999999999e-5

    1. Initial program 44.6

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

      \[\leadsto \color{blue}{\varepsilon \cdot \left(1 - -1 \cdot \frac{{\sin x}^{2}}{{\cos x}^{2}}\right)} \]
    3. Simplified0.6

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

      [Start]0.6

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

      rational_best-simplify-62 [=>]0.6

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

      rational_best-simplify-10 [=>]0.6

      \[ \varepsilon \cdot \left(1 - \frac{\color{blue}{-{\sin x}^{2}}}{{\cos x}^{2}}\right) \]
    4. Applied egg-rr0.5

      \[\leadsto \color{blue}{\frac{{\sin x}^{2} \cdot \varepsilon}{{\cos x}^{2}} + \varepsilon} \]

    if 2.6999999999999999e-5 < eps

    1. Initial program 29.0

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

      \[\leadsto \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}} - \tan x \]
    3. Taylor expanded in x around 0 27.3

      \[\leadsto \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}} \]
    4. Applied egg-rr27.3

      \[\leadsto \color{blue}{\frac{1}{\cos \varepsilon} \cdot \sin \varepsilon} \]
  3. Recombined 3 regimes into one program.
  4. Final simplification14.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \leq -1.28 \cdot 10^{-6}:\\ \;\;\;\;\frac{\sin \varepsilon}{\cos \varepsilon}\\ \mathbf{elif}\;\varepsilon \leq 2.7 \cdot 10^{-5}:\\ \;\;\;\;\frac{{\sin x}^{2} \cdot \varepsilon}{{\cos x}^{2}} + \varepsilon\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\cos \varepsilon} \cdot \sin \varepsilon\\ \end{array} \]

Alternatives

Alternative 1
Error14.0
Cost26440
\[\begin{array}{l} \mathbf{if}\;\varepsilon \leq -1.15 \cdot 10^{-6}:\\ \;\;\;\;\frac{\sin \varepsilon}{\cos \varepsilon}\\ \mathbf{elif}\;\varepsilon \leq 2.2 \cdot 10^{-5}:\\ \;\;\;\;\varepsilon + \varepsilon \cdot \frac{{\sin x}^{2}}{{\cos x}^{2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\cos \varepsilon} \cdot \sin \varepsilon\\ \end{array} \]
Alternative 2
Error26.7
Cost13120
\[\frac{1}{\cos \varepsilon} \cdot \sin \varepsilon \]
Alternative 3
Error26.6
Cost12992
\[\frac{\sin \varepsilon}{\cos \varepsilon} \]
Alternative 4
Error41.4
Cost6592
\[1 \cdot \sin \varepsilon \]
Alternative 5
Error61.3
Cost64
\[0 \]
Alternative 6
Error43.8
Cost64
\[\varepsilon \]

Error

Reproduce?

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