2tan (problem 3.3.2)

Percentage Accurate: 62.5% → 99.9%
Time: 13.3s
Alternatives: 13
Speedup: 34.5×

Specification

?
\[\left(\left(-10000 \leq x \land x \leq 10000\right) \land 10^{-16} \cdot \left|x\right| < \varepsilon\right) \land \varepsilon < \left|x\right|\]
\[\begin{array}{l} \\ \tan \left(x + \varepsilon\right) - \tan x \end{array} \]
(FPCore (x eps) :precision binary64 (- (tan (+ x eps)) (tan x)))
double code(double x, double eps) {
	return tan((x + eps)) - tan(x);
}
real(8) function code(x, eps)
    real(8), intent (in) :: x
    real(8), intent (in) :: eps
    code = tan((x + eps)) - tan(x)
end function
public static double code(double x, double eps) {
	return Math.tan((x + eps)) - Math.tan(x);
}
def code(x, eps):
	return math.tan((x + eps)) - math.tan(x)
function code(x, eps)
	return Float64(tan(Float64(x + eps)) - tan(x))
end
function tmp = code(x, eps)
	tmp = tan((x + eps)) - tan(x);
end
code[x_, eps_] := N[(N[Tan[N[(x + eps), $MachinePrecision]], $MachinePrecision] - N[Tan[x], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\tan \left(x + \varepsilon\right) - \tan x
\end{array}

Sampling outcomes in binary64 precision:

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 13 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 62.5% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \tan \left(x + \varepsilon\right) - \tan x \end{array} \]
(FPCore (x eps) :precision binary64 (- (tan (+ x eps)) (tan x)))
double code(double x, double eps) {
	return tan((x + eps)) - tan(x);
}
real(8) function code(x, eps)
    real(8), intent (in) :: x
    real(8), intent (in) :: eps
    code = tan((x + eps)) - tan(x)
end function
public static double code(double x, double eps) {
	return Math.tan((x + eps)) - Math.tan(x);
}
def code(x, eps):
	return math.tan((x + eps)) - math.tan(x)
function code(x, eps)
	return Float64(tan(Float64(x + eps)) - tan(x))
end
function tmp = code(x, eps)
	tmp = tan((x + eps)) - tan(x);
end
code[x_, eps_] := N[(N[Tan[N[(x + eps), $MachinePrecision]], $MachinePrecision] - N[Tan[x], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\tan \left(x + \varepsilon\right) - \tan x
\end{array}

Alternative 1: 99.9% accurate, 0.6× speedup?

\[\begin{array}{l} \\ \frac{\sin \varepsilon}{\left(\cos \left(x - \left(x + \varepsilon\right)\right) + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot 0.5} \end{array} \]
(FPCore (x eps)
 :precision binary64
 (/ (sin eps) (* (+ (cos (- x (+ x eps))) (cos (fma 2.0 x eps))) 0.5)))
double code(double x, double eps) {
	return sin(eps) / ((cos((x - (x + eps))) + cos(fma(2.0, x, eps))) * 0.5);
}
function code(x, eps)
	return Float64(sin(eps) / Float64(Float64(cos(Float64(x - Float64(x + eps))) + cos(fma(2.0, x, eps))) * 0.5))
end
code[x_, eps_] := N[(N[Sin[eps], $MachinePrecision] / N[(N[(N[Cos[N[(x - N[(x + eps), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] + N[Cos[N[(2.0 * x + eps), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{\sin \varepsilon}{\left(\cos \left(x - \left(x + \varepsilon\right)\right) + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot 0.5}
\end{array}
Derivation
  1. Initial program 62.2%

    \[\tan \left(x + \varepsilon\right) - \tan x \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift--.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) - \tan x} \]
    2. sub-negN/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) + \left(\mathsf{neg}\left(\tan x\right)\right)} \]
    3. lift-tan.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
    4. tan-quotN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
    5. lift-tan.f64N/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\tan x}\right)\right) \]
    6. tan-quotN/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\frac{\sin x}{\cos x}}\right)\right) \]
    7. distribute-neg-fracN/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \color{blue}{\frac{\mathsf{neg}\left(\sin x\right)}{\cos x}} \]
    8. frac-addN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
    9. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
  4. Applied rewrites62.2%

    \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\sin \left(\varepsilon + x\right), \cos x, \cos \left(\varepsilon + x\right) \cdot \left(-\sin x\right)\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x}} \]
  5. Taylor expanded in x around 0

    \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  6. Step-by-step derivation
    1. lower-sin.f64100.0

      \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  7. Applied rewrites100.0%

    \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  8. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\cos \left(\varepsilon + x\right) \cdot \cos x}} \]
    2. lift-cos.f64N/A

      \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\cos \left(\varepsilon + x\right)} \cdot \cos x} \]
    3. lift-cos.f64N/A

      \[\leadsto \frac{\sin \varepsilon}{\cos \left(\varepsilon + x\right) \cdot \color{blue}{\cos x}} \]
    4. cos-multN/A

      \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\frac{\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)}{2}}} \]
    5. div-invN/A

      \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\left(\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)\right) \cdot \frac{1}{2}}} \]
    6. metadata-evalN/A

      \[\leadsto \frac{\sin \varepsilon}{\left(\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)\right) \cdot \color{blue}{\frac{1}{2}}} \]
    7. lower-*.f64N/A

      \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\left(\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)\right) \cdot \frac{1}{2}}} \]
  9. Applied rewrites100.0%

    \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\left(\cos \left(x - \left(x + \varepsilon\right)\right) + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot 0.5}} \]
  10. Add Preprocessing

Alternative 2: 99.9% accurate, 0.6× speedup?

\[\begin{array}{l} \\ \frac{\sin \varepsilon}{\cos \left(\varepsilon + x\right) \cdot \cos x} \end{array} \]
(FPCore (x eps) :precision binary64 (/ (sin eps) (* (cos (+ eps x)) (cos x))))
double code(double x, double eps) {
	return sin(eps) / (cos((eps + x)) * cos(x));
}
real(8) function code(x, eps)
    real(8), intent (in) :: x
    real(8), intent (in) :: eps
    code = sin(eps) / (cos((eps + x)) * cos(x))
end function
public static double code(double x, double eps) {
	return Math.sin(eps) / (Math.cos((eps + x)) * Math.cos(x));
}
def code(x, eps):
	return math.sin(eps) / (math.cos((eps + x)) * math.cos(x))
function code(x, eps)
	return Float64(sin(eps) / Float64(cos(Float64(eps + x)) * cos(x)))
end
function tmp = code(x, eps)
	tmp = sin(eps) / (cos((eps + x)) * cos(x));
end
code[x_, eps_] := N[(N[Sin[eps], $MachinePrecision] / N[(N[Cos[N[(eps + x), $MachinePrecision]], $MachinePrecision] * N[Cos[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{\sin \varepsilon}{\cos \left(\varepsilon + x\right) \cdot \cos x}
\end{array}
Derivation
  1. Initial program 62.2%

    \[\tan \left(x + \varepsilon\right) - \tan x \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift--.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) - \tan x} \]
    2. sub-negN/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) + \left(\mathsf{neg}\left(\tan x\right)\right)} \]
    3. lift-tan.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
    4. tan-quotN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
    5. lift-tan.f64N/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\tan x}\right)\right) \]
    6. tan-quotN/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\frac{\sin x}{\cos x}}\right)\right) \]
    7. distribute-neg-fracN/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \color{blue}{\frac{\mathsf{neg}\left(\sin x\right)}{\cos x}} \]
    8. frac-addN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
    9. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
  4. Applied rewrites62.2%

    \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\sin \left(\varepsilon + x\right), \cos x, \cos \left(\varepsilon + x\right) \cdot \left(-\sin x\right)\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x}} \]
  5. Taylor expanded in x around 0

    \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  6. Step-by-step derivation
    1. lower-sin.f64100.0

      \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  7. Applied rewrites100.0%

    \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  8. Add Preprocessing

Alternative 3: 99.7% accurate, 0.9× speedup?

\[\begin{array}{l} \\ \frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(-0.16666666666666666, \varepsilon, 0\right), \varepsilon, 1\right), \varepsilon, 0\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x} \end{array} \]
(FPCore (x eps)
 :precision binary64
 (/
  (fma (fma (fma -0.16666666666666666 eps 0.0) eps 1.0) eps 0.0)
  (* (cos (+ eps x)) (cos x))))
double code(double x, double eps) {
	return fma(fma(fma(-0.16666666666666666, eps, 0.0), eps, 1.0), eps, 0.0) / (cos((eps + x)) * cos(x));
}
function code(x, eps)
	return Float64(fma(fma(fma(-0.16666666666666666, eps, 0.0), eps, 1.0), eps, 0.0) / Float64(cos(Float64(eps + x)) * cos(x)))
end
code[x_, eps_] := N[(N[(N[(N[(-0.16666666666666666 * eps + 0.0), $MachinePrecision] * eps + 1.0), $MachinePrecision] * eps + 0.0), $MachinePrecision] / N[(N[Cos[N[(eps + x), $MachinePrecision]], $MachinePrecision] * N[Cos[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(-0.16666666666666666, \varepsilon, 0\right), \varepsilon, 1\right), \varepsilon, 0\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x}
\end{array}
Derivation
  1. Initial program 62.2%

    \[\tan \left(x + \varepsilon\right) - \tan x \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift--.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) - \tan x} \]
    2. sub-negN/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) + \left(\mathsf{neg}\left(\tan x\right)\right)} \]
    3. lift-tan.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
    4. tan-quotN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
    5. lift-tan.f64N/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\tan x}\right)\right) \]
    6. tan-quotN/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\frac{\sin x}{\cos x}}\right)\right) \]
    7. distribute-neg-fracN/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \color{blue}{\frac{\mathsf{neg}\left(\sin x\right)}{\cos x}} \]
    8. frac-addN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
    9. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
  4. Applied rewrites62.2%

    \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\sin \left(\varepsilon + x\right), \cos x, \cos \left(\varepsilon + x\right) \cdot \left(-\sin x\right)\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x}} \]
  5. Taylor expanded in eps around 0

    \[\leadsto \frac{\color{blue}{-1 \cdot \left(\cos x \cdot \sin x\right) + \left(\varepsilon \cdot \left(\varepsilon \cdot \left(\frac{-1}{2} \cdot \left(\cos x \cdot \sin x\right) + \left(\frac{1}{2} \cdot \left(\cos x \cdot \sin x\right) + \varepsilon \cdot \left(\frac{-1}{6} \cdot {\cos x}^{2} + \frac{-1}{6} \cdot {\sin x}^{2}\right)\right)\right) + \left({\cos x}^{2} + {\sin x}^{2}\right)\right) + \cos x \cdot \sin x\right)}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  6. Step-by-step derivation
    1. +-commutativeN/A

      \[\leadsto \frac{\color{blue}{\left(\varepsilon \cdot \left(\varepsilon \cdot \left(\frac{-1}{2} \cdot \left(\cos x \cdot \sin x\right) + \left(\frac{1}{2} \cdot \left(\cos x \cdot \sin x\right) + \varepsilon \cdot \left(\frac{-1}{6} \cdot {\cos x}^{2} + \frac{-1}{6} \cdot {\sin x}^{2}\right)\right)\right) + \left({\cos x}^{2} + {\sin x}^{2}\right)\right) + \cos x \cdot \sin x\right) + -1 \cdot \left(\cos x \cdot \sin x\right)}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    2. associate-+l+N/A

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

      \[\leadsto \frac{\color{blue}{\left(\varepsilon \cdot \left(\frac{-1}{2} \cdot \left(\cos x \cdot \sin x\right) + \left(\frac{1}{2} \cdot \left(\cos x \cdot \sin x\right) + \varepsilon \cdot \left(\frac{-1}{6} \cdot {\cos x}^{2} + \frac{-1}{6} \cdot {\sin x}^{2}\right)\right)\right) + \left({\cos x}^{2} + {\sin x}^{2}\right)\right) \cdot \varepsilon} + \left(\cos x \cdot \sin x + -1 \cdot \left(\cos x \cdot \sin x\right)\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    4. distribute-rgt1-inN/A

      \[\leadsto \frac{\left(\varepsilon \cdot \left(\frac{-1}{2} \cdot \left(\cos x \cdot \sin x\right) + \left(\frac{1}{2} \cdot \left(\cos x \cdot \sin x\right) + \varepsilon \cdot \left(\frac{-1}{6} \cdot {\cos x}^{2} + \frac{-1}{6} \cdot {\sin x}^{2}\right)\right)\right) + \left({\cos x}^{2} + {\sin x}^{2}\right)\right) \cdot \varepsilon + \color{blue}{\left(-1 + 1\right) \cdot \left(\cos x \cdot \sin x\right)}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    5. metadata-evalN/A

      \[\leadsto \frac{\left(\varepsilon \cdot \left(\frac{-1}{2} \cdot \left(\cos x \cdot \sin x\right) + \left(\frac{1}{2} \cdot \left(\cos x \cdot \sin x\right) + \varepsilon \cdot \left(\frac{-1}{6} \cdot {\cos x}^{2} + \frac{-1}{6} \cdot {\sin x}^{2}\right)\right)\right) + \left({\cos x}^{2} + {\sin x}^{2}\right)\right) \cdot \varepsilon + \color{blue}{0} \cdot \left(\cos x \cdot \sin x\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    6. mul0-lftN/A

      \[\leadsto \frac{\left(\varepsilon \cdot \left(\frac{-1}{2} \cdot \left(\cos x \cdot \sin x\right) + \left(\frac{1}{2} \cdot \left(\cos x \cdot \sin x\right) + \varepsilon \cdot \left(\frac{-1}{6} \cdot {\cos x}^{2} + \frac{-1}{6} \cdot {\sin x}^{2}\right)\right)\right) + \left({\cos x}^{2} + {\sin x}^{2}\right)\right) \cdot \varepsilon + \color{blue}{0}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  7. Applied rewrites99.7%

    \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(-0.16666666666666666, \varepsilon, 0\right), \varepsilon, 1\right), \varepsilon, 0\right)}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  8. Add Preprocessing

Alternative 4: 99.7% accurate, 0.9× speedup?

\[\begin{array}{l} \\ \frac{\sin \varepsilon}{\left(\mathsf{fma}\left(\varepsilon \cdot \varepsilon, -0.5, 1\right) + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot 0.5} \end{array} \]
(FPCore (x eps)
 :precision binary64
 (/ (sin eps) (* (+ (fma (* eps eps) -0.5 1.0) (cos (fma 2.0 x eps))) 0.5)))
double code(double x, double eps) {
	return sin(eps) / ((fma((eps * eps), -0.5, 1.0) + cos(fma(2.0, x, eps))) * 0.5);
}
function code(x, eps)
	return Float64(sin(eps) / Float64(Float64(fma(Float64(eps * eps), -0.5, 1.0) + cos(fma(2.0, x, eps))) * 0.5))
end
code[x_, eps_] := N[(N[Sin[eps], $MachinePrecision] / N[(N[(N[(N[(eps * eps), $MachinePrecision] * -0.5 + 1.0), $MachinePrecision] + N[Cos[N[(2.0 * x + eps), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{\sin \varepsilon}{\left(\mathsf{fma}\left(\varepsilon \cdot \varepsilon, -0.5, 1\right) + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot 0.5}
\end{array}
Derivation
  1. Initial program 62.2%

    \[\tan \left(x + \varepsilon\right) - \tan x \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift--.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) - \tan x} \]
    2. sub-negN/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) + \left(\mathsf{neg}\left(\tan x\right)\right)} \]
    3. lift-tan.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
    4. tan-quotN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
    5. lift-tan.f64N/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\tan x}\right)\right) \]
    6. tan-quotN/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\frac{\sin x}{\cos x}}\right)\right) \]
    7. distribute-neg-fracN/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \color{blue}{\frac{\mathsf{neg}\left(\sin x\right)}{\cos x}} \]
    8. frac-addN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
    9. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
  4. Applied rewrites62.2%

    \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\sin \left(\varepsilon + x\right), \cos x, \cos \left(\varepsilon + x\right) \cdot \left(-\sin x\right)\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x}} \]
  5. Taylor expanded in x around 0

    \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  6. Step-by-step derivation
    1. lower-sin.f64100.0

      \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  7. Applied rewrites100.0%

    \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  8. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\cos \left(\varepsilon + x\right) \cdot \cos x}} \]
    2. lift-cos.f64N/A

      \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\cos \left(\varepsilon + x\right)} \cdot \cos x} \]
    3. lift-cos.f64N/A

      \[\leadsto \frac{\sin \varepsilon}{\cos \left(\varepsilon + x\right) \cdot \color{blue}{\cos x}} \]
    4. cos-multN/A

      \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\frac{\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)}{2}}} \]
    5. div-invN/A

      \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\left(\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)\right) \cdot \frac{1}{2}}} \]
    6. metadata-evalN/A

      \[\leadsto \frac{\sin \varepsilon}{\left(\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)\right) \cdot \color{blue}{\frac{1}{2}}} \]
    7. lower-*.f64N/A

      \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\left(\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)\right) \cdot \frac{1}{2}}} \]
  9. Applied rewrites100.0%

    \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\left(\cos \left(x - \left(x + \varepsilon\right)\right) + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot 0.5}} \]
  10. Taylor expanded in eps around 0

    \[\leadsto \frac{\sin \varepsilon}{\left(\color{blue}{\left(1 + \frac{-1}{2} \cdot {\varepsilon}^{2}\right)} + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot \frac{1}{2}} \]
  11. Step-by-step derivation
    1. +-commutativeN/A

      \[\leadsto \frac{\sin \varepsilon}{\left(\color{blue}{\left(\frac{-1}{2} \cdot {\varepsilon}^{2} + 1\right)} + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot \frac{1}{2}} \]
    2. *-commutativeN/A

      \[\leadsto \frac{\sin \varepsilon}{\left(\left(\color{blue}{{\varepsilon}^{2} \cdot \frac{-1}{2}} + 1\right) + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot \frac{1}{2}} \]
    3. lower-fma.f64N/A

      \[\leadsto \frac{\sin \varepsilon}{\left(\color{blue}{\mathsf{fma}\left({\varepsilon}^{2}, \frac{-1}{2}, 1\right)} + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot \frac{1}{2}} \]
    4. unpow2N/A

      \[\leadsto \frac{\sin \varepsilon}{\left(\mathsf{fma}\left(\color{blue}{\varepsilon \cdot \varepsilon}, \frac{-1}{2}, 1\right) + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot \frac{1}{2}} \]
    5. lower-*.f6499.7

      \[\leadsto \frac{\sin \varepsilon}{\left(\mathsf{fma}\left(\color{blue}{\varepsilon \cdot \varepsilon}, -0.5, 1\right) + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot 0.5} \]
  12. Applied rewrites99.7%

    \[\leadsto \frac{\sin \varepsilon}{\left(\color{blue}{\mathsf{fma}\left(\varepsilon \cdot \varepsilon, -0.5, 1\right)} + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot 0.5} \]
  13. Add Preprocessing

Alternative 5: 99.4% accurate, 0.9× speedup?

\[\begin{array}{l} \\ \frac{\varepsilon}{\cos \left(\varepsilon + x\right) \cdot \cos x} \end{array} \]
(FPCore (x eps) :precision binary64 (/ eps (* (cos (+ eps x)) (cos x))))
double code(double x, double eps) {
	return eps / (cos((eps + x)) * cos(x));
}
real(8) function code(x, eps)
    real(8), intent (in) :: x
    real(8), intent (in) :: eps
    code = eps / (cos((eps + x)) * cos(x))
end function
public static double code(double x, double eps) {
	return eps / (Math.cos((eps + x)) * Math.cos(x));
}
def code(x, eps):
	return eps / (math.cos((eps + x)) * math.cos(x))
function code(x, eps)
	return Float64(eps / Float64(cos(Float64(eps + x)) * cos(x)))
end
function tmp = code(x, eps)
	tmp = eps / (cos((eps + x)) * cos(x));
end
code[x_, eps_] := N[(eps / N[(N[Cos[N[(eps + x), $MachinePrecision]], $MachinePrecision] * N[Cos[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{\varepsilon}{\cos \left(\varepsilon + x\right) \cdot \cos x}
\end{array}
Derivation
  1. Initial program 62.2%

    \[\tan \left(x + \varepsilon\right) - \tan x \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift--.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) - \tan x} \]
    2. sub-negN/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) + \left(\mathsf{neg}\left(\tan x\right)\right)} \]
    3. lift-tan.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
    4. tan-quotN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
    5. lift-tan.f64N/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\tan x}\right)\right) \]
    6. tan-quotN/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\frac{\sin x}{\cos x}}\right)\right) \]
    7. distribute-neg-fracN/A

      \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \color{blue}{\frac{\mathsf{neg}\left(\sin x\right)}{\cos x}} \]
    8. frac-addN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
    9. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
  4. Applied rewrites62.2%

    \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\sin \left(\varepsilon + x\right), \cos x, \cos \left(\varepsilon + x\right) \cdot \left(-\sin x\right)\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x}} \]
  5. Taylor expanded in x around 0

    \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  6. Step-by-step derivation
    1. lower-sin.f64100.0

      \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  7. Applied rewrites100.0%

    \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  8. Taylor expanded in eps around 0

    \[\leadsto \frac{\color{blue}{-1 \cdot \left(\cos x \cdot \sin x\right) + \left(\varepsilon \cdot \left({\cos x}^{2} + {\sin x}^{2}\right) + \cos x \cdot \sin x\right)}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  9. Step-by-step derivation
    1. +-commutativeN/A

      \[\leadsto \frac{-1 \cdot \left(\cos x \cdot \sin x\right) + \color{blue}{\left(\cos x \cdot \sin x + \varepsilon \cdot \left({\cos x}^{2} + {\sin x}^{2}\right)\right)}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    2. associate-+r+N/A

      \[\leadsto \frac{\color{blue}{\left(-1 \cdot \left(\cos x \cdot \sin x\right) + \cos x \cdot \sin x\right) + \varepsilon \cdot \left({\cos x}^{2} + {\sin x}^{2}\right)}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    3. distribute-lft1-inN/A

      \[\leadsto \frac{\color{blue}{\left(-1 + 1\right) \cdot \left(\cos x \cdot \sin x\right)} + \varepsilon \cdot \left({\cos x}^{2} + {\sin x}^{2}\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    4. metadata-evalN/A

      \[\leadsto \frac{\color{blue}{0} \cdot \left(\cos x \cdot \sin x\right) + \varepsilon \cdot \left({\cos x}^{2} + {\sin x}^{2}\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    5. mul0-lftN/A

      \[\leadsto \frac{\color{blue}{0} + \varepsilon \cdot \left({\cos x}^{2} + {\sin x}^{2}\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    6. unpow2N/A

      \[\leadsto \frac{0 + \varepsilon \cdot \left(\color{blue}{\cos x \cdot \cos x} + {\sin x}^{2}\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    7. unpow2N/A

      \[\leadsto \frac{0 + \varepsilon \cdot \left(\cos x \cdot \cos x + \color{blue}{\sin x \cdot \sin x}\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    8. cos-sin-sumN/A

      \[\leadsto \frac{0 + \varepsilon \cdot \color{blue}{1}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    9. *-rgt-identityN/A

      \[\leadsto \frac{0 + \color{blue}{\varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    10. remove-double-negN/A

      \[\leadsto \frac{0 + \color{blue}{\left(\mathsf{neg}\left(\left(\mathsf{neg}\left(\varepsilon\right)\right)\right)\right)}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    11. mul-1-negN/A

      \[\leadsto \frac{0 + \left(\mathsf{neg}\left(\color{blue}{-1 \cdot \varepsilon}\right)\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    12. sub-negN/A

      \[\leadsto \frac{\color{blue}{0 - -1 \cdot \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    13. neg-sub0N/A

      \[\leadsto \frac{\color{blue}{\mathsf{neg}\left(-1 \cdot \varepsilon\right)}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    14. mul-1-negN/A

      \[\leadsto \frac{\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\varepsilon\right)\right)}\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
    15. remove-double-neg99.5

      \[\leadsto \frac{\color{blue}{\varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  10. Applied rewrites99.5%

    \[\leadsto \frac{\color{blue}{\varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
  11. Add Preprocessing

Alternative 6: 99.0% accurate, 1.7× speedup?

\[\begin{array}{l} \\ \frac{\varepsilon}{\cos \left(-2 \cdot x\right) + 1} \cdot 2 \end{array} \]
(FPCore (x eps) :precision binary64 (* (/ eps (+ (cos (* -2.0 x)) 1.0)) 2.0))
double code(double x, double eps) {
	return (eps / (cos((-2.0 * x)) + 1.0)) * 2.0;
}
real(8) function code(x, eps)
    real(8), intent (in) :: x
    real(8), intent (in) :: eps
    code = (eps / (cos(((-2.0d0) * x)) + 1.0d0)) * 2.0d0
end function
public static double code(double x, double eps) {
	return (eps / (Math.cos((-2.0 * x)) + 1.0)) * 2.0;
}
def code(x, eps):
	return (eps / (math.cos((-2.0 * x)) + 1.0)) * 2.0
function code(x, eps)
	return Float64(Float64(eps / Float64(cos(Float64(-2.0 * x)) + 1.0)) * 2.0)
end
function tmp = code(x, eps)
	tmp = (eps / (cos((-2.0 * x)) + 1.0)) * 2.0;
end
code[x_, eps_] := N[(N[(eps / N[(N[Cos[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] * 2.0), $MachinePrecision]
\begin{array}{l}

\\
\frac{\varepsilon}{\cos \left(-2 \cdot x\right) + 1} \cdot 2
\end{array}
Derivation
  1. Initial program 62.2%

    \[\tan \left(x + \varepsilon\right) - \tan x \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-tan.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} - \tan x \]
    2. tan-quotN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} - \tan x \]
    3. clear-numN/A

      \[\leadsto \color{blue}{\frac{1}{\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}}} - \tan x \]
    4. inv-powN/A

      \[\leadsto \color{blue}{{\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{-1}} - \tan x \]
    5. metadata-evalN/A

      \[\leadsto {\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{\color{blue}{\left(-1 \cdot 1\right)}} - \tan x \]
    6. pow-powN/A

      \[\leadsto \color{blue}{{\left({\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{-1}\right)}^{1}} - \tan x \]
    7. inv-powN/A

      \[\leadsto {\color{blue}{\left(\frac{1}{\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}}\right)}}^{1} - \tan x \]
    8. clear-numN/A

      \[\leadsto {\color{blue}{\left(\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}\right)}}^{1} - \tan x \]
    9. tan-quotN/A

      \[\leadsto {\color{blue}{\tan \left(x + \varepsilon\right)}}^{1} - \tan x \]
    10. lift-tan.f64N/A

      \[\leadsto {\color{blue}{\tan \left(x + \varepsilon\right)}}^{1} - \tan x \]
    11. pow-to-expN/A

      \[\leadsto \color{blue}{e^{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
    12. lower-exp.f64N/A

      \[\leadsto \color{blue}{e^{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
    13. lower-*.f64N/A

      \[\leadsto e^{\color{blue}{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
    14. lower-log.f6423.0

      \[\leadsto e^{\color{blue}{\log \tan \left(x + \varepsilon\right)} \cdot 1} - \tan x \]
    15. lift-+.f64N/A

      \[\leadsto e^{\log \tan \color{blue}{\left(x + \varepsilon\right)} \cdot 1} - \tan x \]
    16. +-commutativeN/A

      \[\leadsto e^{\log \tan \color{blue}{\left(\varepsilon + x\right)} \cdot 1} - \tan x \]
    17. lower-+.f6423.0

      \[\leadsto e^{\log \tan \color{blue}{\left(\varepsilon + x\right)} \cdot 1} - \tan x \]
  4. Applied rewrites23.0%

    \[\leadsto \color{blue}{e^{\log \tan \left(\varepsilon + x\right) \cdot 1}} - \tan x \]
  5. Applied rewrites100.0%

    \[\leadsto \color{blue}{\frac{\sin \left(\varepsilon + 0\right)}{\cos \left(\varepsilon + 0\right) + \cos \left(\left(\varepsilon + x\right) + x\right)} \cdot 2} \]
  6. Taylor expanded in eps around 0

    \[\leadsto \color{blue}{\frac{\varepsilon}{1 + \cos \left(2 \cdot x\right)}} \cdot 2 \]
  7. Step-by-step derivation
    1. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{\varepsilon}{1 + \cos \left(2 \cdot x\right)}} \cdot 2 \]
    2. +-commutativeN/A

      \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(2 \cdot x\right) + 1}} \cdot 2 \]
    3. lower-+.f64N/A

      \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(2 \cdot x\right) + 1}} \cdot 2 \]
    4. metadata-evalN/A

      \[\leadsto \frac{\varepsilon}{\cos \left(\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)} \cdot x\right) + 1} \cdot 2 \]
    5. distribute-lft-neg-inN/A

      \[\leadsto \frac{\varepsilon}{\cos \color{blue}{\left(\mathsf{neg}\left(-2 \cdot x\right)\right)} + 1} \cdot 2 \]
    6. cos-negN/A

      \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(-2 \cdot x\right)} + 1} \cdot 2 \]
    7. lower-cos.f64N/A

      \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(-2 \cdot x\right)} + 1} \cdot 2 \]
    8. lower-*.f6499.2

      \[\leadsto \frac{\varepsilon}{\cos \color{blue}{\left(-2 \cdot x\right)} + 1} \cdot 2 \]
  8. Applied rewrites99.2%

    \[\leadsto \color{blue}{\frac{\varepsilon}{\cos \left(-2 \cdot x\right) + 1}} \cdot 2 \]
  9. Add Preprocessing

Alternative 7: 98.3% accurate, 3.4× speedup?

\[\begin{array}{l} \\ \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\left(-x\right) \cdot x, \varepsilon \cdot -0.18888888888888888, 0.3333333333333333 \cdot \varepsilon\right), x \cdot x, 0.5 \cdot \varepsilon\right), x \cdot x, 0.5 \cdot \varepsilon\right) \cdot 2 \end{array} \]
(FPCore (x eps)
 :precision binary64
 (*
  (fma
   (fma
    (fma (* (- x) x) (* eps -0.18888888888888888) (* 0.3333333333333333 eps))
    (* x x)
    (* 0.5 eps))
   (* x x)
   (* 0.5 eps))
  2.0))
double code(double x, double eps) {
	return fma(fma(fma((-x * x), (eps * -0.18888888888888888), (0.3333333333333333 * eps)), (x * x), (0.5 * eps)), (x * x), (0.5 * eps)) * 2.0;
}
function code(x, eps)
	return Float64(fma(fma(fma(Float64(Float64(-x) * x), Float64(eps * -0.18888888888888888), Float64(0.3333333333333333 * eps)), Float64(x * x), Float64(0.5 * eps)), Float64(x * x), Float64(0.5 * eps)) * 2.0)
end
code[x_, eps_] := N[(N[(N[(N[(N[((-x) * x), $MachinePrecision] * N[(eps * -0.18888888888888888), $MachinePrecision] + N[(0.3333333333333333 * eps), $MachinePrecision]), $MachinePrecision] * N[(x * x), $MachinePrecision] + N[(0.5 * eps), $MachinePrecision]), $MachinePrecision] * N[(x * x), $MachinePrecision] + N[(0.5 * eps), $MachinePrecision]), $MachinePrecision] * 2.0), $MachinePrecision]
\begin{array}{l}

\\
\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\left(-x\right) \cdot x, \varepsilon \cdot -0.18888888888888888, 0.3333333333333333 \cdot \varepsilon\right), x \cdot x, 0.5 \cdot \varepsilon\right), x \cdot x, 0.5 \cdot \varepsilon\right) \cdot 2
\end{array}
Derivation
  1. Initial program 62.2%

    \[\tan \left(x + \varepsilon\right) - \tan x \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-tan.f64N/A

      \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} - \tan x \]
    2. tan-quotN/A

      \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} - \tan x \]
    3. clear-numN/A

      \[\leadsto \color{blue}{\frac{1}{\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}}} - \tan x \]
    4. inv-powN/A

      \[\leadsto \color{blue}{{\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{-1}} - \tan x \]
    5. metadata-evalN/A

      \[\leadsto {\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{\color{blue}{\left(-1 \cdot 1\right)}} - \tan x \]
    6. pow-powN/A

      \[\leadsto \color{blue}{{\left({\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{-1}\right)}^{1}} - \tan x \]
    7. inv-powN/A

      \[\leadsto {\color{blue}{\left(\frac{1}{\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}}\right)}}^{1} - \tan x \]
    8. clear-numN/A

      \[\leadsto {\color{blue}{\left(\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}\right)}}^{1} - \tan x \]
    9. tan-quotN/A

      \[\leadsto {\color{blue}{\tan \left(x + \varepsilon\right)}}^{1} - \tan x \]
    10. lift-tan.f64N/A

      \[\leadsto {\color{blue}{\tan \left(x + \varepsilon\right)}}^{1} - \tan x \]
    11. pow-to-expN/A

      \[\leadsto \color{blue}{e^{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
    12. lower-exp.f64N/A

      \[\leadsto \color{blue}{e^{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
    13. lower-*.f64N/A

      \[\leadsto e^{\color{blue}{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
    14. lower-log.f6423.0

      \[\leadsto e^{\color{blue}{\log \tan \left(x + \varepsilon\right)} \cdot 1} - \tan x \]
    15. lift-+.f64N/A

      \[\leadsto e^{\log \tan \color{blue}{\left(x + \varepsilon\right)} \cdot 1} - \tan x \]
    16. +-commutativeN/A

      \[\leadsto e^{\log \tan \color{blue}{\left(\varepsilon + x\right)} \cdot 1} - \tan x \]
    17. lower-+.f6423.0

      \[\leadsto e^{\log \tan \color{blue}{\left(\varepsilon + x\right)} \cdot 1} - \tan x \]
  4. Applied rewrites23.0%

    \[\leadsto \color{blue}{e^{\log \tan \left(\varepsilon + x\right) \cdot 1}} - \tan x \]
  5. Applied rewrites100.0%

    \[\leadsto \color{blue}{\frac{\sin \left(\varepsilon + 0\right)}{\cos \left(\varepsilon + 0\right) + \cos \left(\left(\varepsilon + x\right) + x\right)} \cdot 2} \]
  6. Taylor expanded in eps around 0

    \[\leadsto \color{blue}{\frac{\varepsilon}{1 + \cos \left(2 \cdot x\right)}} \cdot 2 \]
  7. Step-by-step derivation
    1. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{\varepsilon}{1 + \cos \left(2 \cdot x\right)}} \cdot 2 \]
    2. +-commutativeN/A

      \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(2 \cdot x\right) + 1}} \cdot 2 \]
    3. lower-+.f64N/A

      \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(2 \cdot x\right) + 1}} \cdot 2 \]
    4. metadata-evalN/A

      \[\leadsto \frac{\varepsilon}{\cos \left(\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)} \cdot x\right) + 1} \cdot 2 \]
    5. distribute-lft-neg-inN/A

      \[\leadsto \frac{\varepsilon}{\cos \color{blue}{\left(\mathsf{neg}\left(-2 \cdot x\right)\right)} + 1} \cdot 2 \]
    6. cos-negN/A

      \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(-2 \cdot x\right)} + 1} \cdot 2 \]
    7. lower-cos.f64N/A

      \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(-2 \cdot x\right)} + 1} \cdot 2 \]
    8. lower-*.f6499.2

      \[\leadsto \frac{\varepsilon}{\cos \color{blue}{\left(-2 \cdot x\right)} + 1} \cdot 2 \]
  8. Applied rewrites99.2%

    \[\leadsto \color{blue}{\frac{\varepsilon}{\cos \left(-2 \cdot x\right) + 1}} \cdot 2 \]
  9. Taylor expanded in x around 0

    \[\leadsto \left(\frac{1}{2} \cdot \varepsilon + \color{blue}{{x}^{2} \cdot \left({x}^{2} \cdot \left(-1 \cdot \left({x}^{2} \cdot \left(\frac{-1}{2} \cdot \varepsilon + \left(\frac{-1}{45} \cdot \varepsilon + \frac{1}{3} \cdot \varepsilon\right)\right)\right) - \left(\frac{-1}{2} \cdot \varepsilon + \frac{1}{6} \cdot \varepsilon\right)\right) - \frac{-1}{2} \cdot \varepsilon\right)}\right) \cdot 2 \]
  10. Step-by-step derivation
    1. Applied rewrites98.9%

      \[\leadsto \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\left(-x\right) \cdot x, \varepsilon \cdot -0.18888888888888888, 0.3333333333333333 \cdot \varepsilon\right), x \cdot x, 0.5 \cdot \varepsilon\right), \color{blue}{x \cdot x}, 0.5 \cdot \varepsilon\right) \cdot 2 \]
    2. Add Preprocessing

    Alternative 8: 98.3% accurate, 4.9× speedup?

    \[\begin{array}{l} \\ \frac{\varepsilon}{\mathsf{fma}\left(\mathsf{fma}\left(0.6666666666666666, x \cdot x, -2\right), x \cdot x, 1\right) + 1} \cdot 2 \end{array} \]
    (FPCore (x eps)
     :precision binary64
     (*
      (/ eps (+ (fma (fma 0.6666666666666666 (* x x) -2.0) (* x x) 1.0) 1.0))
      2.0))
    double code(double x, double eps) {
    	return (eps / (fma(fma(0.6666666666666666, (x * x), -2.0), (x * x), 1.0) + 1.0)) * 2.0;
    }
    
    function code(x, eps)
    	return Float64(Float64(eps / Float64(fma(fma(0.6666666666666666, Float64(x * x), -2.0), Float64(x * x), 1.0) + 1.0)) * 2.0)
    end
    
    code[x_, eps_] := N[(N[(eps / N[(N[(N[(0.6666666666666666 * N[(x * x), $MachinePrecision] + -2.0), $MachinePrecision] * N[(x * x), $MachinePrecision] + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] * 2.0), $MachinePrecision]
    
    \begin{array}{l}
    
    \\
    \frac{\varepsilon}{\mathsf{fma}\left(\mathsf{fma}\left(0.6666666666666666, x \cdot x, -2\right), x \cdot x, 1\right) + 1} \cdot 2
    \end{array}
    
    Derivation
    1. Initial program 62.2%

      \[\tan \left(x + \varepsilon\right) - \tan x \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-tan.f64N/A

        \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} - \tan x \]
      2. tan-quotN/A

        \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} - \tan x \]
      3. clear-numN/A

        \[\leadsto \color{blue}{\frac{1}{\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}}} - \tan x \]
      4. inv-powN/A

        \[\leadsto \color{blue}{{\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{-1}} - \tan x \]
      5. metadata-evalN/A

        \[\leadsto {\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{\color{blue}{\left(-1 \cdot 1\right)}} - \tan x \]
      6. pow-powN/A

        \[\leadsto \color{blue}{{\left({\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{-1}\right)}^{1}} - \tan x \]
      7. inv-powN/A

        \[\leadsto {\color{blue}{\left(\frac{1}{\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}}\right)}}^{1} - \tan x \]
      8. clear-numN/A

        \[\leadsto {\color{blue}{\left(\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}\right)}}^{1} - \tan x \]
      9. tan-quotN/A

        \[\leadsto {\color{blue}{\tan \left(x + \varepsilon\right)}}^{1} - \tan x \]
      10. lift-tan.f64N/A

        \[\leadsto {\color{blue}{\tan \left(x + \varepsilon\right)}}^{1} - \tan x \]
      11. pow-to-expN/A

        \[\leadsto \color{blue}{e^{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
      12. lower-exp.f64N/A

        \[\leadsto \color{blue}{e^{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
      13. lower-*.f64N/A

        \[\leadsto e^{\color{blue}{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
      14. lower-log.f6423.0

        \[\leadsto e^{\color{blue}{\log \tan \left(x + \varepsilon\right)} \cdot 1} - \tan x \]
      15. lift-+.f64N/A

        \[\leadsto e^{\log \tan \color{blue}{\left(x + \varepsilon\right)} \cdot 1} - \tan x \]
      16. +-commutativeN/A

        \[\leadsto e^{\log \tan \color{blue}{\left(\varepsilon + x\right)} \cdot 1} - \tan x \]
      17. lower-+.f6423.0

        \[\leadsto e^{\log \tan \color{blue}{\left(\varepsilon + x\right)} \cdot 1} - \tan x \]
    4. Applied rewrites23.0%

      \[\leadsto \color{blue}{e^{\log \tan \left(\varepsilon + x\right) \cdot 1}} - \tan x \]
    5. Applied rewrites100.0%

      \[\leadsto \color{blue}{\frac{\sin \left(\varepsilon + 0\right)}{\cos \left(\varepsilon + 0\right) + \cos \left(\left(\varepsilon + x\right) + x\right)} \cdot 2} \]
    6. Taylor expanded in eps around 0

      \[\leadsto \color{blue}{\frac{\varepsilon}{1 + \cos \left(2 \cdot x\right)}} \cdot 2 \]
    7. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{\varepsilon}{1 + \cos \left(2 \cdot x\right)}} \cdot 2 \]
      2. +-commutativeN/A

        \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(2 \cdot x\right) + 1}} \cdot 2 \]
      3. lower-+.f64N/A

        \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(2 \cdot x\right) + 1}} \cdot 2 \]
      4. metadata-evalN/A

        \[\leadsto \frac{\varepsilon}{\cos \left(\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)} \cdot x\right) + 1} \cdot 2 \]
      5. distribute-lft-neg-inN/A

        \[\leadsto \frac{\varepsilon}{\cos \color{blue}{\left(\mathsf{neg}\left(-2 \cdot x\right)\right)} + 1} \cdot 2 \]
      6. cos-negN/A

        \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(-2 \cdot x\right)} + 1} \cdot 2 \]
      7. lower-cos.f64N/A

        \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(-2 \cdot x\right)} + 1} \cdot 2 \]
      8. lower-*.f6499.2

        \[\leadsto \frac{\varepsilon}{\cos \color{blue}{\left(-2 \cdot x\right)} + 1} \cdot 2 \]
    8. Applied rewrites99.2%

      \[\leadsto \color{blue}{\frac{\varepsilon}{\cos \left(-2 \cdot x\right) + 1}} \cdot 2 \]
    9. Taylor expanded in x around 0

      \[\leadsto \frac{\varepsilon}{\left(1 + {x}^{2} \cdot \left(\frac{2}{3} \cdot {x}^{2} - 2\right)\right) + 1} \cdot 2 \]
    10. Step-by-step derivation
      1. Applied rewrites98.8%

        \[\leadsto \frac{\varepsilon}{\mathsf{fma}\left(\mathsf{fma}\left(0.6666666666666666, x \cdot x, -2\right), x \cdot x, 1\right) + 1} \cdot 2 \]
      2. Add Preprocessing

      Alternative 9: 98.3% accurate, 5.3× speedup?

      \[\begin{array}{l} \\ \frac{\varepsilon}{\mathsf{fma}\left(\mathsf{fma}\left(0.6666666666666666, x \cdot x, -2\right), x \cdot x, 2\right)} \cdot 2 \end{array} \]
      (FPCore (x eps)
       :precision binary64
       (* (/ eps (fma (fma 0.6666666666666666 (* x x) -2.0) (* x x) 2.0)) 2.0))
      double code(double x, double eps) {
      	return (eps / fma(fma(0.6666666666666666, (x * x), -2.0), (x * x), 2.0)) * 2.0;
      }
      
      function code(x, eps)
      	return Float64(Float64(eps / fma(fma(0.6666666666666666, Float64(x * x), -2.0), Float64(x * x), 2.0)) * 2.0)
      end
      
      code[x_, eps_] := N[(N[(eps / N[(N[(0.6666666666666666 * N[(x * x), $MachinePrecision] + -2.0), $MachinePrecision] * N[(x * x), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] * 2.0), $MachinePrecision]
      
      \begin{array}{l}
      
      \\
      \frac{\varepsilon}{\mathsf{fma}\left(\mathsf{fma}\left(0.6666666666666666, x \cdot x, -2\right), x \cdot x, 2\right)} \cdot 2
      \end{array}
      
      Derivation
      1. Initial program 62.2%

        \[\tan \left(x + \varepsilon\right) - \tan x \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. lift-tan.f64N/A

          \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} - \tan x \]
        2. tan-quotN/A

          \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} - \tan x \]
        3. clear-numN/A

          \[\leadsto \color{blue}{\frac{1}{\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}}} - \tan x \]
        4. inv-powN/A

          \[\leadsto \color{blue}{{\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{-1}} - \tan x \]
        5. metadata-evalN/A

          \[\leadsto {\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{\color{blue}{\left(-1 \cdot 1\right)}} - \tan x \]
        6. pow-powN/A

          \[\leadsto \color{blue}{{\left({\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{-1}\right)}^{1}} - \tan x \]
        7. inv-powN/A

          \[\leadsto {\color{blue}{\left(\frac{1}{\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}}\right)}}^{1} - \tan x \]
        8. clear-numN/A

          \[\leadsto {\color{blue}{\left(\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}\right)}}^{1} - \tan x \]
        9. tan-quotN/A

          \[\leadsto {\color{blue}{\tan \left(x + \varepsilon\right)}}^{1} - \tan x \]
        10. lift-tan.f64N/A

          \[\leadsto {\color{blue}{\tan \left(x + \varepsilon\right)}}^{1} - \tan x \]
        11. pow-to-expN/A

          \[\leadsto \color{blue}{e^{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
        12. lower-exp.f64N/A

          \[\leadsto \color{blue}{e^{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
        13. lower-*.f64N/A

          \[\leadsto e^{\color{blue}{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
        14. lower-log.f6423.0

          \[\leadsto e^{\color{blue}{\log \tan \left(x + \varepsilon\right)} \cdot 1} - \tan x \]
        15. lift-+.f64N/A

          \[\leadsto e^{\log \tan \color{blue}{\left(x + \varepsilon\right)} \cdot 1} - \tan x \]
        16. +-commutativeN/A

          \[\leadsto e^{\log \tan \color{blue}{\left(\varepsilon + x\right)} \cdot 1} - \tan x \]
        17. lower-+.f6423.0

          \[\leadsto e^{\log \tan \color{blue}{\left(\varepsilon + x\right)} \cdot 1} - \tan x \]
      4. Applied rewrites23.0%

        \[\leadsto \color{blue}{e^{\log \tan \left(\varepsilon + x\right) \cdot 1}} - \tan x \]
      5. Applied rewrites100.0%

        \[\leadsto \color{blue}{\frac{\sin \left(\varepsilon + 0\right)}{\cos \left(\varepsilon + 0\right) + \cos \left(\left(\varepsilon + x\right) + x\right)} \cdot 2} \]
      6. Taylor expanded in eps around 0

        \[\leadsto \color{blue}{\frac{\varepsilon}{1 + \cos \left(2 \cdot x\right)}} \cdot 2 \]
      7. Step-by-step derivation
        1. lower-/.f64N/A

          \[\leadsto \color{blue}{\frac{\varepsilon}{1 + \cos \left(2 \cdot x\right)}} \cdot 2 \]
        2. +-commutativeN/A

          \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(2 \cdot x\right) + 1}} \cdot 2 \]
        3. lower-+.f64N/A

          \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(2 \cdot x\right) + 1}} \cdot 2 \]
        4. metadata-evalN/A

          \[\leadsto \frac{\varepsilon}{\cos \left(\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)} \cdot x\right) + 1} \cdot 2 \]
        5. distribute-lft-neg-inN/A

          \[\leadsto \frac{\varepsilon}{\cos \color{blue}{\left(\mathsf{neg}\left(-2 \cdot x\right)\right)} + 1} \cdot 2 \]
        6. cos-negN/A

          \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(-2 \cdot x\right)} + 1} \cdot 2 \]
        7. lower-cos.f64N/A

          \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(-2 \cdot x\right)} + 1} \cdot 2 \]
        8. lower-*.f6499.2

          \[\leadsto \frac{\varepsilon}{\cos \color{blue}{\left(-2 \cdot x\right)} + 1} \cdot 2 \]
      8. Applied rewrites99.2%

        \[\leadsto \color{blue}{\frac{\varepsilon}{\cos \left(-2 \cdot x\right) + 1}} \cdot 2 \]
      9. Taylor expanded in x around 0

        \[\leadsto \frac{\varepsilon}{2 + \color{blue}{{x}^{2} \cdot \left(\frac{2}{3} \cdot {x}^{2} - 2\right)}} \cdot 2 \]
      10. Step-by-step derivation
        1. Applied rewrites98.8%

          \[\leadsto \frac{\varepsilon}{\mathsf{fma}\left(\mathsf{fma}\left(0.6666666666666666, x \cdot x, -2\right), \color{blue}{x \cdot x}, 2\right)} \cdot 2 \]
        2. Add Preprocessing

        Alternative 10: 98.2% accurate, 9.4× speedup?

        \[\begin{array}{l} \\ \left(\mathsf{fma}\left(x \cdot x, \varepsilon, \varepsilon\right) \cdot 0.5\right) \cdot 2 \end{array} \]
        (FPCore (x eps) :precision binary64 (* (* (fma (* x x) eps eps) 0.5) 2.0))
        double code(double x, double eps) {
        	return (fma((x * x), eps, eps) * 0.5) * 2.0;
        }
        
        function code(x, eps)
        	return Float64(Float64(fma(Float64(x * x), eps, eps) * 0.5) * 2.0)
        end
        
        code[x_, eps_] := N[(N[(N[(N[(x * x), $MachinePrecision] * eps + eps), $MachinePrecision] * 0.5), $MachinePrecision] * 2.0), $MachinePrecision]
        
        \begin{array}{l}
        
        \\
        \left(\mathsf{fma}\left(x \cdot x, \varepsilon, \varepsilon\right) \cdot 0.5\right) \cdot 2
        \end{array}
        
        Derivation
        1. Initial program 62.2%

          \[\tan \left(x + \varepsilon\right) - \tan x \]
        2. Add Preprocessing
        3. Step-by-step derivation
          1. lift-tan.f64N/A

            \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} - \tan x \]
          2. tan-quotN/A

            \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} - \tan x \]
          3. clear-numN/A

            \[\leadsto \color{blue}{\frac{1}{\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}}} - \tan x \]
          4. inv-powN/A

            \[\leadsto \color{blue}{{\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{-1}} - \tan x \]
          5. metadata-evalN/A

            \[\leadsto {\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{\color{blue}{\left(-1 \cdot 1\right)}} - \tan x \]
          6. pow-powN/A

            \[\leadsto \color{blue}{{\left({\left(\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}\right)}^{-1}\right)}^{1}} - \tan x \]
          7. inv-powN/A

            \[\leadsto {\color{blue}{\left(\frac{1}{\frac{\cos \left(x + \varepsilon\right)}{\sin \left(x + \varepsilon\right)}}\right)}}^{1} - \tan x \]
          8. clear-numN/A

            \[\leadsto {\color{blue}{\left(\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}\right)}}^{1} - \tan x \]
          9. tan-quotN/A

            \[\leadsto {\color{blue}{\tan \left(x + \varepsilon\right)}}^{1} - \tan x \]
          10. lift-tan.f64N/A

            \[\leadsto {\color{blue}{\tan \left(x + \varepsilon\right)}}^{1} - \tan x \]
          11. pow-to-expN/A

            \[\leadsto \color{blue}{e^{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
          12. lower-exp.f64N/A

            \[\leadsto \color{blue}{e^{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
          13. lower-*.f64N/A

            \[\leadsto e^{\color{blue}{\log \tan \left(x + \varepsilon\right) \cdot 1}} - \tan x \]
          14. lower-log.f6423.0

            \[\leadsto e^{\color{blue}{\log \tan \left(x + \varepsilon\right)} \cdot 1} - \tan x \]
          15. lift-+.f64N/A

            \[\leadsto e^{\log \tan \color{blue}{\left(x + \varepsilon\right)} \cdot 1} - \tan x \]
          16. +-commutativeN/A

            \[\leadsto e^{\log \tan \color{blue}{\left(\varepsilon + x\right)} \cdot 1} - \tan x \]
          17. lower-+.f6423.0

            \[\leadsto e^{\log \tan \color{blue}{\left(\varepsilon + x\right)} \cdot 1} - \tan x \]
        4. Applied rewrites23.0%

          \[\leadsto \color{blue}{e^{\log \tan \left(\varepsilon + x\right) \cdot 1}} - \tan x \]
        5. Applied rewrites100.0%

          \[\leadsto \color{blue}{\frac{\sin \left(\varepsilon + 0\right)}{\cos \left(\varepsilon + 0\right) + \cos \left(\left(\varepsilon + x\right) + x\right)} \cdot 2} \]
        6. Taylor expanded in eps around 0

          \[\leadsto \color{blue}{\frac{\varepsilon}{1 + \cos \left(2 \cdot x\right)}} \cdot 2 \]
        7. Step-by-step derivation
          1. lower-/.f64N/A

            \[\leadsto \color{blue}{\frac{\varepsilon}{1 + \cos \left(2 \cdot x\right)}} \cdot 2 \]
          2. +-commutativeN/A

            \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(2 \cdot x\right) + 1}} \cdot 2 \]
          3. lower-+.f64N/A

            \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(2 \cdot x\right) + 1}} \cdot 2 \]
          4. metadata-evalN/A

            \[\leadsto \frac{\varepsilon}{\cos \left(\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)} \cdot x\right) + 1} \cdot 2 \]
          5. distribute-lft-neg-inN/A

            \[\leadsto \frac{\varepsilon}{\cos \color{blue}{\left(\mathsf{neg}\left(-2 \cdot x\right)\right)} + 1} \cdot 2 \]
          6. cos-negN/A

            \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(-2 \cdot x\right)} + 1} \cdot 2 \]
          7. lower-cos.f64N/A

            \[\leadsto \frac{\varepsilon}{\color{blue}{\cos \left(-2 \cdot x\right)} + 1} \cdot 2 \]
          8. lower-*.f6499.2

            \[\leadsto \frac{\varepsilon}{\cos \color{blue}{\left(-2 \cdot x\right)} + 1} \cdot 2 \]
        8. Applied rewrites99.2%

          \[\leadsto \color{blue}{\frac{\varepsilon}{\cos \left(-2 \cdot x\right) + 1}} \cdot 2 \]
        9. Taylor expanded in x around 0

          \[\leadsto \left(\frac{1}{2} \cdot \varepsilon + \color{blue}{\frac{1}{2} \cdot \left(\varepsilon \cdot {x}^{2}\right)}\right) \cdot 2 \]
        10. Step-by-step derivation
          1. Applied rewrites98.5%

            \[\leadsto \left(\mathsf{fma}\left(x \cdot x, \varepsilon, \varepsilon\right) \cdot \color{blue}{0.5}\right) \cdot 2 \]
          2. Add Preprocessing

          Alternative 11: 97.8% accurate, 12.2× speedup?

          \[\begin{array}{l} \\ \mathsf{fma}\left(\varepsilon \cdot \varepsilon, 0.3333333333333333, 1\right) \cdot \varepsilon \end{array} \]
          (FPCore (x eps)
           :precision binary64
           (* (fma (* eps eps) 0.3333333333333333 1.0) eps))
          double code(double x, double eps) {
          	return fma((eps * eps), 0.3333333333333333, 1.0) * eps;
          }
          
          function code(x, eps)
          	return Float64(fma(Float64(eps * eps), 0.3333333333333333, 1.0) * eps)
          end
          
          code[x_, eps_] := N[(N[(N[(eps * eps), $MachinePrecision] * 0.3333333333333333 + 1.0), $MachinePrecision] * eps), $MachinePrecision]
          
          \begin{array}{l}
          
          \\
          \mathsf{fma}\left(\varepsilon \cdot \varepsilon, 0.3333333333333333, 1\right) \cdot \varepsilon
          \end{array}
          
          Derivation
          1. Initial program 62.2%

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

            \[\leadsto \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}} \]
          4. Step-by-step derivation
            1. lower-/.f64N/A

              \[\leadsto \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}} \]
            2. lower-sin.f64N/A

              \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \varepsilon} \]
            3. lower-cos.f6497.9

              \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\cos \varepsilon}} \]
          5. Applied rewrites97.9%

            \[\leadsto \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}} \]
          6. Taylor expanded in eps around 0

            \[\leadsto \varepsilon \cdot \color{blue}{\left(1 + \frac{1}{3} \cdot {\varepsilon}^{2}\right)} \]
          7. Step-by-step derivation
            1. Applied rewrites97.9%

              \[\leadsto \mathsf{fma}\left(\varepsilon \cdot \varepsilon, 0.3333333333333333, 1\right) \cdot \color{blue}{\varepsilon} \]
            2. Add Preprocessing

            Alternative 12: 97.8% accurate, 34.5× speedup?

            \[\begin{array}{l} \\ 1 \cdot \varepsilon \end{array} \]
            (FPCore (x eps) :precision binary64 (* 1.0 eps))
            double code(double x, double eps) {
            	return 1.0 * eps;
            }
            
            real(8) function code(x, eps)
                real(8), intent (in) :: x
                real(8), intent (in) :: eps
                code = 1.0d0 * eps
            end function
            
            public static double code(double x, double eps) {
            	return 1.0 * eps;
            }
            
            def code(x, eps):
            	return 1.0 * eps
            
            function code(x, eps)
            	return Float64(1.0 * eps)
            end
            
            function tmp = code(x, eps)
            	tmp = 1.0 * eps;
            end
            
            code[x_, eps_] := N[(1.0 * eps), $MachinePrecision]
            
            \begin{array}{l}
            
            \\
            1 \cdot \varepsilon
            \end{array}
            
            Derivation
            1. Initial program 62.2%

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

              \[\leadsto \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}} \]
            4. Step-by-step derivation
              1. lower-/.f64N/A

                \[\leadsto \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}} \]
              2. lower-sin.f64N/A

                \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \varepsilon} \]
              3. lower-cos.f6497.9

                \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\cos \varepsilon}} \]
            5. Applied rewrites97.9%

              \[\leadsto \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}} \]
            6. Taylor expanded in eps around 0

              \[\leadsto \varepsilon \cdot \color{blue}{\left(1 + \frac{1}{3} \cdot {\varepsilon}^{2}\right)} \]
            7. Step-by-step derivation
              1. Applied rewrites97.9%

                \[\leadsto \mathsf{fma}\left(\varepsilon \cdot \varepsilon, 0.3333333333333333, 1\right) \cdot \color{blue}{\varepsilon} \]
              2. Taylor expanded in eps around 0

                \[\leadsto 1 \cdot \varepsilon \]
              3. Step-by-step derivation
                1. Applied rewrites97.9%

                  \[\leadsto 1 \cdot \varepsilon \]
                2. Add Preprocessing

                Alternative 13: 5.4% accurate, 207.0× speedup?

                \[\begin{array}{l} \\ 0 \end{array} \]
                (FPCore (x eps) :precision binary64 0.0)
                double code(double x, double eps) {
                	return 0.0;
                }
                
                real(8) function code(x, eps)
                    real(8), intent (in) :: x
                    real(8), intent (in) :: eps
                    code = 0.0d0
                end function
                
                public static double code(double x, double eps) {
                	return 0.0;
                }
                
                def code(x, eps):
                	return 0.0
                
                function code(x, eps)
                	return 0.0
                end
                
                function tmp = code(x, eps)
                	tmp = 0.0;
                end
                
                code[x_, eps_] := 0.0
                
                \begin{array}{l}
                
                \\
                0
                \end{array}
                
                Derivation
                1. Initial program 62.2%

                  \[\tan \left(x + \varepsilon\right) - \tan x \]
                2. Add Preprocessing
                3. Step-by-step derivation
                  1. lift--.f64N/A

                    \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) - \tan x} \]
                  2. sub-negN/A

                    \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right) + \left(\mathsf{neg}\left(\tan x\right)\right)} \]
                  3. lift-tan.f64N/A

                    \[\leadsto \color{blue}{\tan \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
                  4. tan-quotN/A

                    \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)}} + \left(\mathsf{neg}\left(\tan x\right)\right) \]
                  5. lift-tan.f64N/A

                    \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\tan x}\right)\right) \]
                  6. tan-quotN/A

                    \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \left(\mathsf{neg}\left(\color{blue}{\frac{\sin x}{\cos x}}\right)\right) \]
                  7. distribute-neg-fracN/A

                    \[\leadsto \frac{\sin \left(x + \varepsilon\right)}{\cos \left(x + \varepsilon\right)} + \color{blue}{\frac{\mathsf{neg}\left(\sin x\right)}{\cos x}} \]
                  8. frac-addN/A

                    \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
                  9. lower-/.f64N/A

                    \[\leadsto \color{blue}{\frac{\sin \left(x + \varepsilon\right) \cdot \cos x + \cos \left(x + \varepsilon\right) \cdot \left(\mathsf{neg}\left(\sin x\right)\right)}{\cos \left(x + \varepsilon\right) \cdot \cos x}} \]
                4. Applied rewrites62.2%

                  \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\sin \left(\varepsilon + x\right), \cos x, \cos \left(\varepsilon + x\right) \cdot \left(-\sin x\right)\right)}{\cos \left(\varepsilon + x\right) \cdot \cos x}} \]
                5. Taylor expanded in x around 0

                  \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
                6. Step-by-step derivation
                  1. lower-sin.f64100.0

                    \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
                7. Applied rewrites100.0%

                  \[\leadsto \frac{\color{blue}{\sin \varepsilon}}{\cos \left(\varepsilon + x\right) \cdot \cos x} \]
                8. Step-by-step derivation
                  1. lift-*.f64N/A

                    \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\cos \left(\varepsilon + x\right) \cdot \cos x}} \]
                  2. lift-cos.f64N/A

                    \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\cos \left(\varepsilon + x\right)} \cdot \cos x} \]
                  3. lift-cos.f64N/A

                    \[\leadsto \frac{\sin \varepsilon}{\cos \left(\varepsilon + x\right) \cdot \color{blue}{\cos x}} \]
                  4. cos-multN/A

                    \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\frac{\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)}{2}}} \]
                  5. div-invN/A

                    \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\left(\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)\right) \cdot \frac{1}{2}}} \]
                  6. metadata-evalN/A

                    \[\leadsto \frac{\sin \varepsilon}{\left(\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)\right) \cdot \color{blue}{\frac{1}{2}}} \]
                  7. lower-*.f64N/A

                    \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\left(\cos \left(\left(\varepsilon + x\right) + x\right) + \cos \left(\left(\varepsilon + x\right) - x\right)\right) \cdot \frac{1}{2}}} \]
                9. Applied rewrites100.0%

                  \[\leadsto \frac{\sin \varepsilon}{\color{blue}{\left(\cos \left(x - \left(x + \varepsilon\right)\right) + \cos \left(\mathsf{fma}\left(2, x, \varepsilon\right)\right)\right) \cdot 0.5}} \]
                10. Taylor expanded in eps around 0

                  \[\leadsto \color{blue}{2 \cdot \frac{-1 \cdot \left(\cos x \cdot \sin x\right) + \cos x \cdot \sin x}{1 + \cos \left(2 \cdot x\right)}} \]
                11. Step-by-step derivation
                  1. associate-*r/N/A

                    \[\leadsto \color{blue}{\frac{2 \cdot \left(-1 \cdot \left(\cos x \cdot \sin x\right) + \cos x \cdot \sin x\right)}{1 + \cos \left(2 \cdot x\right)}} \]
                  2. distribute-lft1-inN/A

                    \[\leadsto \frac{2 \cdot \color{blue}{\left(\left(-1 + 1\right) \cdot \left(\cos x \cdot \sin x\right)\right)}}{1 + \cos \left(2 \cdot x\right)} \]
                  3. metadata-evalN/A

                    \[\leadsto \frac{2 \cdot \left(\color{blue}{0} \cdot \left(\cos x \cdot \sin x\right)\right)}{1 + \cos \left(2 \cdot x\right)} \]
                  4. mul0-lftN/A

                    \[\leadsto \frac{2 \cdot \color{blue}{0}}{1 + \cos \left(2 \cdot x\right)} \]
                  5. metadata-evalN/A

                    \[\leadsto \frac{\color{blue}{0}}{1 + \cos \left(2 \cdot x\right)} \]
                  6. mul0-rgtN/A

                    \[\leadsto \frac{\color{blue}{\left(\cos x \cdot \sin x\right) \cdot 0}}{1 + \cos \left(2 \cdot x\right)} \]
                  7. associate-*l/N/A

                    \[\leadsto \color{blue}{\frac{\cos x \cdot \sin x}{1 + \cos \left(2 \cdot x\right)} \cdot 0} \]
                  8. mul0-rgt5.4

                    \[\leadsto \color{blue}{0} \]
                12. Applied rewrites5.4%

                  \[\leadsto \color{blue}{0} \]
                13. Add Preprocessing

                Developer Target 1: 99.0% accurate, 1.0× speedup?

                \[\begin{array}{l} \\ \varepsilon + \left(\varepsilon \cdot \tan x\right) \cdot \tan x \end{array} \]
                (FPCore (x eps) :precision binary64 (+ eps (* (* eps (tan x)) (tan x))))
                double code(double x, double eps) {
                	return eps + ((eps * tan(x)) * tan(x));
                }
                
                real(8) function code(x, eps)
                    real(8), intent (in) :: x
                    real(8), intent (in) :: eps
                    code = eps + ((eps * tan(x)) * tan(x))
                end function
                
                public static double code(double x, double eps) {
                	return eps + ((eps * Math.tan(x)) * Math.tan(x));
                }
                
                def code(x, eps):
                	return eps + ((eps * math.tan(x)) * math.tan(x))
                
                function code(x, eps)
                	return Float64(eps + Float64(Float64(eps * tan(x)) * tan(x)))
                end
                
                function tmp = code(x, eps)
                	tmp = eps + ((eps * tan(x)) * tan(x));
                end
                
                code[x_, eps_] := N[(eps + N[(N[(eps * N[Tan[x], $MachinePrecision]), $MachinePrecision] * N[Tan[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
                
                \begin{array}{l}
                
                \\
                \varepsilon + \left(\varepsilon \cdot \tan x\right) \cdot \tan x
                \end{array}
                

                Reproduce

                ?
                herbie shell --seed 2024313 
                (FPCore (x eps)
                  :name "2tan (problem 3.3.2)"
                  :precision binary64
                  :pre (and (and (and (<= -10000.0 x) (<= x 10000.0)) (< (* 1e-16 (fabs x)) eps)) (< eps (fabs x)))
                
                  :alt
                  (! :herbie-platform default (+ eps (* eps (tan x) (tan x))))
                
                  (- (tan (+ x eps)) (tan x)))