| Alternative 1 | |
|---|---|
| Accuracy | 99.5% |
| Cost | 163080 |
(FPCore (x eps) :precision binary64 (- (tan (+ x eps)) (tan x)))
(FPCore (x eps)
:precision binary64
(let* ((t_0 (pow (sin x) 2.0))
(t_1 (pow (cos x) 2.0))
(t_2 (/ t_0 t_1))
(t_3 (+ 1.0 t_2))
(t_4 (+ (tan x) (tan eps)))
(t_5 (* (sin x) t_3))
(t_6
(+
0.3333333333333333
(+ (/ (* t_0 t_3) t_1) (* 0.3333333333333333 t_2)))))
(if (<= eps -0.000215)
(- (/ t_4 (- 1.0 (/ (tan eps) (/ 1.0 (tan x))))) (tan x))
(if (<= eps 0.00016)
(+
(*
(pow eps 4.0)
(+
(/ (* (sin x) t_6) (cos x))
(* 0.3333333333333333 (/ t_5 (cos x)))))
(+
(* eps t_3)
(+ (/ (* t_5 (pow eps 2.0)) (cos x)) (* t_6 (pow eps 3.0)))))
(- (- (tan x)) (/ t_4 (fma (tan x) (tan eps) -1.0)))))))double code(double x, double eps) {
return tan((x + eps)) - tan(x);
}
double code(double x, double eps) {
double t_0 = pow(sin(x), 2.0);
double t_1 = pow(cos(x), 2.0);
double t_2 = t_0 / t_1;
double t_3 = 1.0 + t_2;
double t_4 = tan(x) + tan(eps);
double t_5 = sin(x) * t_3;
double t_6 = 0.3333333333333333 + (((t_0 * t_3) / t_1) + (0.3333333333333333 * t_2));
double tmp;
if (eps <= -0.000215) {
tmp = (t_4 / (1.0 - (tan(eps) / (1.0 / tan(x))))) - tan(x);
} else if (eps <= 0.00016) {
tmp = (pow(eps, 4.0) * (((sin(x) * t_6) / cos(x)) + (0.3333333333333333 * (t_5 / cos(x))))) + ((eps * t_3) + (((t_5 * pow(eps, 2.0)) / cos(x)) + (t_6 * pow(eps, 3.0))));
} else {
tmp = -tan(x) - (t_4 / fma(tan(x), tan(eps), -1.0));
}
return tmp;
}
function code(x, eps) return Float64(tan(Float64(x + eps)) - tan(x)) end
function code(x, eps) t_0 = sin(x) ^ 2.0 t_1 = cos(x) ^ 2.0 t_2 = Float64(t_0 / t_1) t_3 = Float64(1.0 + t_2) t_4 = Float64(tan(x) + tan(eps)) t_5 = Float64(sin(x) * t_3) t_6 = Float64(0.3333333333333333 + Float64(Float64(Float64(t_0 * t_3) / t_1) + Float64(0.3333333333333333 * t_2))) tmp = 0.0 if (eps <= -0.000215) tmp = Float64(Float64(t_4 / Float64(1.0 - Float64(tan(eps) / Float64(1.0 / tan(x))))) - tan(x)); elseif (eps <= 0.00016) tmp = Float64(Float64((eps ^ 4.0) * Float64(Float64(Float64(sin(x) * t_6) / cos(x)) + Float64(0.3333333333333333 * Float64(t_5 / cos(x))))) + Float64(Float64(eps * t_3) + Float64(Float64(Float64(t_5 * (eps ^ 2.0)) / cos(x)) + Float64(t_6 * (eps ^ 3.0))))); else tmp = Float64(Float64(-tan(x)) - Float64(t_4 / fma(tan(x), tan(eps), -1.0))); end return tmp end
code[x_, eps_] := N[(N[Tan[N[(x + eps), $MachinePrecision]], $MachinePrecision] - N[Tan[x], $MachinePrecision]), $MachinePrecision]
code[x_, eps_] := Block[{t$95$0 = N[Power[N[Sin[x], $MachinePrecision], 2.0], $MachinePrecision]}, Block[{t$95$1 = N[Power[N[Cos[x], $MachinePrecision], 2.0], $MachinePrecision]}, Block[{t$95$2 = N[(t$95$0 / t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[(1.0 + t$95$2), $MachinePrecision]}, Block[{t$95$4 = N[(N[Tan[x], $MachinePrecision] + N[Tan[eps], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$5 = N[(N[Sin[x], $MachinePrecision] * t$95$3), $MachinePrecision]}, Block[{t$95$6 = N[(0.3333333333333333 + N[(N[(N[(t$95$0 * t$95$3), $MachinePrecision] / t$95$1), $MachinePrecision] + N[(0.3333333333333333 * t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[eps, -0.000215], N[(N[(t$95$4 / N[(1.0 - N[(N[Tan[eps], $MachinePrecision] / N[(1.0 / N[Tan[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[Tan[x], $MachinePrecision]), $MachinePrecision], If[LessEqual[eps, 0.00016], N[(N[(N[Power[eps, 4.0], $MachinePrecision] * N[(N[(N[(N[Sin[x], $MachinePrecision] * t$95$6), $MachinePrecision] / N[Cos[x], $MachinePrecision]), $MachinePrecision] + N[(0.3333333333333333 * N[(t$95$5 / N[Cos[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(eps * t$95$3), $MachinePrecision] + N[(N[(N[(t$95$5 * N[Power[eps, 2.0], $MachinePrecision]), $MachinePrecision] / N[Cos[x], $MachinePrecision]), $MachinePrecision] + N[(t$95$6 * N[Power[eps, 3.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[((-N[Tan[x], $MachinePrecision]) - N[(t$95$4 / N[(N[Tan[x], $MachinePrecision] * N[Tan[eps], $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]]
\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
t_0 := {\sin x}^{2}\\
t_1 := {\cos x}^{2}\\
t_2 := \frac{t_0}{t_1}\\
t_3 := 1 + t_2\\
t_4 := \tan x + \tan \varepsilon\\
t_5 := \sin x \cdot t_3\\
t_6 := 0.3333333333333333 + \left(\frac{t_0 \cdot t_3}{t_1} + 0.3333333333333333 \cdot t_2\right)\\
\mathbf{if}\;\varepsilon \leq -0.000215:\\
\;\;\;\;\frac{t_4}{1 - \frac{\tan \varepsilon}{\frac{1}{\tan x}}} - \tan x\\
\mathbf{elif}\;\varepsilon \leq 0.00016:\\
\;\;\;\;{\varepsilon}^{4} \cdot \left(\frac{\sin x \cdot t_6}{\cos x} + 0.3333333333333333 \cdot \frac{t_5}{\cos x}\right) + \left(\varepsilon \cdot t_3 + \left(\frac{t_5 \cdot {\varepsilon}^{2}}{\cos x} + t_6 \cdot {\varepsilon}^{3}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(-\tan x\right) - \frac{t_4}{\mathsf{fma}\left(\tan x, \tan \varepsilon, -1\right)}\\
\end{array}
| Original | 42.3% |
|---|---|
| Target | 77.2% |
| Herbie | 99.5% |
if eps < -2.14999999999999995e-4Initial program 53.9%
Applied egg-rr99.5%
Simplified99.5%
[Start]99.5 | \[ \left(\tan x + \tan \varepsilon\right) \cdot \frac{1}{1 - \tan x \cdot \tan \varepsilon} - \tan x
\] |
|---|---|
associate-*r/ [=>]99.5 | \[ \color{blue}{\frac{\left(\tan x + \tan \varepsilon\right) \cdot 1}{1 - \tan x \cdot \tan \varepsilon}} - \tan x
\] |
*-rgt-identity [=>]99.5 | \[ \frac{\color{blue}{\tan x + \tan \varepsilon}}{1 - \tan x \cdot \tan \varepsilon} - \tan x
\] |
Applied egg-rr99.5%
Simplified99.5%
[Start]99.5 | \[ \frac{\tan x + \tan \varepsilon}{1 - \frac{\tan x}{\frac{1}{\tan \varepsilon}}} - \tan x
\] |
|---|---|
associate-/r/ [=>]99.5 | \[ \frac{\tan x + \tan \varepsilon}{1 - \color{blue}{\frac{\tan x}{1} \cdot \tan \varepsilon}} - \tan x
\] |
associate-*l/ [=>]99.5 | \[ \frac{\tan x + \tan \varepsilon}{1 - \color{blue}{\frac{\tan x \cdot \tan \varepsilon}{1}}} - \tan x
\] |
*-commutative [=>]99.5 | \[ \frac{\tan x + \tan \varepsilon}{1 - \frac{\color{blue}{\tan \varepsilon \cdot \tan x}}{1}} - \tan x
\] |
associate-*l/ [<=]99.5 | \[ \frac{\tan x + \tan \varepsilon}{1 - \color{blue}{\frac{\tan \varepsilon}{1} \cdot \tan x}} - \tan x
\] |
associate-/r/ [<=]99.5 | \[ \frac{\tan x + \tan \varepsilon}{1 - \color{blue}{\frac{\tan \varepsilon}{\frac{1}{\tan x}}}} - \tan x
\] |
if -2.14999999999999995e-4 < eps < 1.60000000000000013e-4Initial program 30.4%
Applied egg-rr31.7%
Simplified31.7%
[Start]31.7 | \[ \left(\tan x + \tan \varepsilon\right) \cdot \frac{1}{1 - \tan x \cdot \tan \varepsilon} - \tan x
\] |
|---|---|
associate-*r/ [=>]31.7 | \[ \color{blue}{\frac{\left(\tan x + \tan \varepsilon\right) \cdot 1}{1 - \tan x \cdot \tan \varepsilon}} - \tan x
\] |
*-rgt-identity [=>]31.7 | \[ \frac{\color{blue}{\tan x + \tan \varepsilon}}{1 - \tan x \cdot \tan \varepsilon} - \tan x
\] |
Applied egg-rr31.7%
Simplified31.7%
[Start]31.7 | \[ \left(\tan x + \tan \varepsilon\right) \cdot \frac{-1}{-1 + \tan x \cdot \tan \varepsilon} - \tan x
\] |
|---|---|
*-commutative [<=]31.7 | \[ \color{blue}{\frac{-1}{-1 + \tan x \cdot \tan \varepsilon} \cdot \left(\tan x + \tan \varepsilon\right)} - \tan x
\] |
associate-*l/ [=>]31.7 | \[ \color{blue}{\frac{-1 \cdot \left(\tan x + \tan \varepsilon\right)}{-1 + \tan x \cdot \tan \varepsilon}} - \tan x
\] |
associate-*r/ [<=]31.7 | \[ \color{blue}{-1 \cdot \frac{\tan x + \tan \varepsilon}{-1 + \tan x \cdot \tan \varepsilon}} - \tan x
\] |
neg-mul-1 [<=]31.7 | \[ \color{blue}{\left(-\frac{\tan x + \tan \varepsilon}{-1 + \tan x \cdot \tan \varepsilon}\right)} - \tan x
\] |
distribute-neg-frac [=>]31.7 | \[ \color{blue}{\frac{-\left(\tan x + \tan \varepsilon\right)}{-1 + \tan x \cdot \tan \varepsilon}} - \tan x
\] |
+-commutative [=>]31.7 | \[ \frac{-\left(\tan x + \tan \varepsilon\right)}{\color{blue}{\tan x \cdot \tan \varepsilon + -1}} - \tan x
\] |
metadata-eval [<=]31.7 | \[ \frac{-\left(\tan x + \tan \varepsilon\right)}{\tan x \cdot \tan \varepsilon + \color{blue}{\left(-1\right)}} - \tan x
\] |
sub-neg [<=]31.7 | \[ \frac{-\left(\tan x + \tan \varepsilon\right)}{\color{blue}{\tan x \cdot \tan \varepsilon - 1}} - \tan x
\] |
fma-neg [=>]31.7 | \[ \frac{-\left(\tan x + \tan \varepsilon\right)}{\color{blue}{\mathsf{fma}\left(\tan x, \tan \varepsilon, -1\right)}} - \tan x
\] |
metadata-eval [=>]31.7 | \[ \frac{-\left(\tan x + \tan \varepsilon\right)}{\mathsf{fma}\left(\tan x, \tan \varepsilon, \color{blue}{-1}\right)} - \tan x
\] |
Taylor expanded in eps around 0 99.6%
if 1.60000000000000013e-4 < eps Initial program 54.9%
Applied egg-rr99.5%
Simplified99.5%
[Start]99.5 | \[ \left(\tan x + \tan \varepsilon\right) \cdot \frac{1}{1 - \tan x \cdot \tan \varepsilon} - \tan x
\] |
|---|---|
associate-*r/ [=>]99.5 | \[ \color{blue}{\frac{\left(\tan x + \tan \varepsilon\right) \cdot 1}{1 - \tan x \cdot \tan \varepsilon}} - \tan x
\] |
*-rgt-identity [=>]99.5 | \[ \frac{\color{blue}{\tan x + \tan \varepsilon}}{1 - \tan x \cdot \tan \varepsilon} - \tan x
\] |
Applied egg-rr99.5%
Simplified99.5%
[Start]99.5 | \[ \left(\tan x + \tan \varepsilon\right) \cdot \frac{-1}{-1 + \tan x \cdot \tan \varepsilon} - \tan x
\] |
|---|---|
*-commutative [<=]99.5 | \[ \color{blue}{\frac{-1}{-1 + \tan x \cdot \tan \varepsilon} \cdot \left(\tan x + \tan \varepsilon\right)} - \tan x
\] |
associate-*l/ [=>]99.5 | \[ \color{blue}{\frac{-1 \cdot \left(\tan x + \tan \varepsilon\right)}{-1 + \tan x \cdot \tan \varepsilon}} - \tan x
\] |
associate-*r/ [<=]99.5 | \[ \color{blue}{-1 \cdot \frac{\tan x + \tan \varepsilon}{-1 + \tan x \cdot \tan \varepsilon}} - \tan x
\] |
neg-mul-1 [<=]99.5 | \[ \color{blue}{\left(-\frac{\tan x + \tan \varepsilon}{-1 + \tan x \cdot \tan \varepsilon}\right)} - \tan x
\] |
distribute-neg-frac [=>]99.5 | \[ \color{blue}{\frac{-\left(\tan x + \tan \varepsilon\right)}{-1 + \tan x \cdot \tan \varepsilon}} - \tan x
\] |
+-commutative [=>]99.5 | \[ \frac{-\left(\tan x + \tan \varepsilon\right)}{\color{blue}{\tan x \cdot \tan \varepsilon + -1}} - \tan x
\] |
metadata-eval [<=]99.5 | \[ \frac{-\left(\tan x + \tan \varepsilon\right)}{\tan x \cdot \tan \varepsilon + \color{blue}{\left(-1\right)}} - \tan x
\] |
sub-neg [<=]99.5 | \[ \frac{-\left(\tan x + \tan \varepsilon\right)}{\color{blue}{\tan x \cdot \tan \varepsilon - 1}} - \tan x
\] |
fma-neg [=>]99.5 | \[ \frac{-\left(\tan x + \tan \varepsilon\right)}{\color{blue}{\mathsf{fma}\left(\tan x, \tan \varepsilon, -1\right)}} - \tan x
\] |
metadata-eval [=>]99.5 | \[ \frac{-\left(\tan x + \tan \varepsilon\right)}{\mathsf{fma}\left(\tan x, \tan \varepsilon, \color{blue}{-1}\right)} - \tan x
\] |
Final simplification99.5%
| Alternative 1 | |
|---|---|
| Accuracy | 99.5% |
| Cost | 163080 |
| Alternative 2 | |
|---|---|
| Accuracy | 99.5% |
| Cost | 157128 |
| Alternative 3 | |
|---|---|
| Accuracy | 98.9% |
| Cost | 39304 |
| Alternative 4 | |
|---|---|
| Accuracy | 98.9% |
| Cost | 33097 |
| Alternative 5 | |
|---|---|
| Accuracy | 99.0% |
| Cost | 32969 |
| Alternative 6 | |
|---|---|
| Accuracy | 98.9% |
| Cost | 32968 |
| Alternative 7 | |
|---|---|
| Accuracy | 78.5% |
| Cost | 26952 |
| Alternative 8 | |
|---|---|
| Accuracy | 78.4% |
| Cost | 26697 |
| Alternative 9 | |
|---|---|
| Accuracy | 77.4% |
| Cost | 19848 |
| Alternative 10 | |
|---|---|
| Accuracy | 77.5% |
| Cost | 19720 |
| Alternative 11 | |
|---|---|
| Accuracy | 77.5% |
| Cost | 13508 |
| Alternative 12 | |
|---|---|
| Accuracy | 77.5% |
| Cost | 13448 |
| Alternative 13 | |
|---|---|
| Accuracy | 58.5% |
| Cost | 6464 |
| Alternative 14 | |
|---|---|
| Accuracy | 31.7% |
| Cost | 64 |
herbie shell --seed 2023129
(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)))