| Alternative 1 | |
|---|---|
| Accuracy | 99.2% |
| Cost | 40136 |

(FPCore (x eps) :precision binary64 (- (cos (+ x eps)) (cos x)))
(FPCore (x eps)
:precision binary64
(if (<= eps -0.00325)
(fma (cos x) (cos eps) (- (- (cos x)) (* (sin x) (sin eps))))
(if (<= eps 0.0014)
(+
(-
(* -2.0 (* (* (sin x) (pow eps 3.0)) -0.08333333333333333))
(* eps (sin x)))
(*
(cos x)
(fma (pow eps 4.0) 0.041666666666666664 (* eps (* eps -0.5)))))
(fma (sin x) (- (sin eps)) (* (cos x) (+ (cos eps) -1.0))))))double code(double x, double eps) {
return cos((x + eps)) - cos(x);
}
double code(double x, double eps) {
double tmp;
if (eps <= -0.00325) {
tmp = fma(cos(x), cos(eps), (-cos(x) - (sin(x) * sin(eps))));
} else if (eps <= 0.0014) {
tmp = ((-2.0 * ((sin(x) * pow(eps, 3.0)) * -0.08333333333333333)) - (eps * sin(x))) + (cos(x) * fma(pow(eps, 4.0), 0.041666666666666664, (eps * (eps * -0.5))));
} else {
tmp = fma(sin(x), -sin(eps), (cos(x) * (cos(eps) + -1.0)));
}
return tmp;
}
function code(x, eps) return Float64(cos(Float64(x + eps)) - cos(x)) end
function code(x, eps) tmp = 0.0 if (eps <= -0.00325) tmp = fma(cos(x), cos(eps), Float64(Float64(-cos(x)) - Float64(sin(x) * sin(eps)))); elseif (eps <= 0.0014) tmp = Float64(Float64(Float64(-2.0 * Float64(Float64(sin(x) * (eps ^ 3.0)) * -0.08333333333333333)) - Float64(eps * sin(x))) + Float64(cos(x) * fma((eps ^ 4.0), 0.041666666666666664, Float64(eps * Float64(eps * -0.5))))); else tmp = fma(sin(x), Float64(-sin(eps)), Float64(cos(x) * Float64(cos(eps) + -1.0))); end return tmp end
code[x_, eps_] := N[(N[Cos[N[(x + eps), $MachinePrecision]], $MachinePrecision] - N[Cos[x], $MachinePrecision]), $MachinePrecision]
code[x_, eps_] := If[LessEqual[eps, -0.00325], N[(N[Cos[x], $MachinePrecision] * N[Cos[eps], $MachinePrecision] + N[((-N[Cos[x], $MachinePrecision]) - N[(N[Sin[x], $MachinePrecision] * N[Sin[eps], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[eps, 0.0014], N[(N[(N[(-2.0 * N[(N[(N[Sin[x], $MachinePrecision] * N[Power[eps, 3.0], $MachinePrecision]), $MachinePrecision] * -0.08333333333333333), $MachinePrecision]), $MachinePrecision] - N[(eps * N[Sin[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[Cos[x], $MachinePrecision] * N[(N[Power[eps, 4.0], $MachinePrecision] * 0.041666666666666664 + N[(eps * N[(eps * -0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[Sin[x], $MachinePrecision] * (-N[Sin[eps], $MachinePrecision]) + N[(N[Cos[x], $MachinePrecision] * N[(N[Cos[eps], $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \leq -0.00325:\\
\;\;\;\;\mathsf{fma}\left(\cos x, \cos \varepsilon, \left(-\cos x\right) - \sin x \cdot \sin \varepsilon\right)\\
\mathbf{elif}\;\varepsilon \leq 0.0014:\\
\;\;\;\;\left(-2 \cdot \left(\left(\sin x \cdot {\varepsilon}^{3}\right) \cdot -0.08333333333333333\right) - \varepsilon \cdot \sin x\right) + \cos x \cdot \mathsf{fma}\left({\varepsilon}^{4}, 0.041666666666666664, \varepsilon \cdot \left(\varepsilon \cdot -0.5\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\sin x, -\sin \varepsilon, \cos x \cdot \left(\cos \varepsilon + -1\right)\right)\\
\end{array}
Herbie found 14 alternatives:
| Alternative | Accuracy | Speedup |
|---|
if eps < -0.00324999999999999985Initial program 58.5%
Applied egg-rr98.8%
[Start]58.5% | \[ \cos \left(x + \varepsilon\right) - \cos x
\] |
|---|---|
cos-sum [=>]98.7% | \[ \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x
\] |
associate--l- [=>]98.7% | \[ \color{blue}{\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon + \cos x\right)}
\] |
fma-neg [=>]98.8% | \[ \color{blue}{\mathsf{fma}\left(\cos x, \cos \varepsilon, -\left(\sin x \cdot \sin \varepsilon + \cos x\right)\right)}
\] |
fma-def [=>]98.8% | \[ \mathsf{fma}\left(\cos x, \cos \varepsilon, -\color{blue}{\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\right)
\] |
Applied egg-rr98.8%
[Start]98.8% | \[ \mathsf{fma}\left(\cos x, \cos \varepsilon, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)
\] |
|---|---|
fma-udef [=>]98.8% | \[ \mathsf{fma}\left(\cos x, \cos \varepsilon, -\color{blue}{\left(\sin x \cdot \sin \varepsilon + \cos x\right)}\right)
\] |
if -0.00324999999999999985 < eps < 0.00139999999999999999Initial program 19.4%
Applied egg-rr44.1%
[Start]19.4% | \[ \cos \left(x + \varepsilon\right) - \cos x
\] |
|---|---|
diff-cos [=>]44.1% | \[ \color{blue}{-2 \cdot \left(\sin \left(\frac{\left(x + \varepsilon\right) - x}{2}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)}
\] |
div-inv [=>]44.1% | \[ -2 \cdot \left(\sin \color{blue}{\left(\left(\left(x + \varepsilon\right) - x\right) \cdot \frac{1}{2}\right)} \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)
\] |
metadata-eval [=>]44.1% | \[ -2 \cdot \left(\sin \left(\left(\left(x + \varepsilon\right) - x\right) \cdot \color{blue}{0.5}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)
\] |
div-inv [=>]44.1% | \[ -2 \cdot \left(\sin \left(\left(\left(x + \varepsilon\right) - x\right) \cdot 0.5\right) \cdot \sin \color{blue}{\left(\left(\left(x + \varepsilon\right) + x\right) \cdot \frac{1}{2}\right)}\right)
\] |
+-commutative [=>]44.1% | \[ -2 \cdot \left(\sin \left(\left(\left(x + \varepsilon\right) - x\right) \cdot 0.5\right) \cdot \sin \left(\color{blue}{\left(x + \left(x + \varepsilon\right)\right)} \cdot \frac{1}{2}\right)\right)
\] |
metadata-eval [=>]44.1% | \[ -2 \cdot \left(\sin \left(\left(\left(x + \varepsilon\right) - x\right) \cdot 0.5\right) \cdot \sin \left(\left(x + \left(x + \varepsilon\right)\right) \cdot \color{blue}{0.5}\right)\right)
\] |
Simplified99.2%
[Start]44.1% | \[ -2 \cdot \left(\sin \left(\left(\left(x + \varepsilon\right) - x\right) \cdot 0.5\right) \cdot \sin \left(\left(x + \left(x + \varepsilon\right)\right) \cdot 0.5\right)\right)
\] |
|---|---|
*-commutative [=>]44.1% | \[ -2 \cdot \left(\sin \color{blue}{\left(0.5 \cdot \left(\left(x + \varepsilon\right) - x\right)\right)} \cdot \sin \left(\left(x + \left(x + \varepsilon\right)\right) \cdot 0.5\right)\right)
\] |
+-commutative [<=]44.1% | \[ -2 \cdot \left(\sin \left(0.5 \cdot \left(\color{blue}{\left(\varepsilon + x\right)} - x\right)\right) \cdot \sin \left(\left(x + \left(x + \varepsilon\right)\right) \cdot 0.5\right)\right)
\] |
associate--l+ [=>]99.2% | \[ -2 \cdot \left(\sin \left(0.5 \cdot \color{blue}{\left(\varepsilon + \left(x - x\right)\right)}\right) \cdot \sin \left(\left(x + \left(x + \varepsilon\right)\right) \cdot 0.5\right)\right)
\] |
+-inverses [=>]99.2% | \[ -2 \cdot \left(\sin \left(0.5 \cdot \left(\varepsilon + \color{blue}{0}\right)\right) \cdot \sin \left(\left(x + \left(x + \varepsilon\right)\right) \cdot 0.5\right)\right)
\] |
distribute-lft-in [=>]99.2% | \[ -2 \cdot \left(\sin \color{blue}{\left(0.5 \cdot \varepsilon + 0.5 \cdot 0\right)} \cdot \sin \left(\left(x + \left(x + \varepsilon\right)\right) \cdot 0.5\right)\right)
\] |
metadata-eval [=>]99.2% | \[ -2 \cdot \left(\sin \left(0.5 \cdot \varepsilon + \color{blue}{0}\right) \cdot \sin \left(\left(x + \left(x + \varepsilon\right)\right) \cdot 0.5\right)\right)
\] |
*-commutative [=>]99.2% | \[ -2 \cdot \left(\sin \left(0.5 \cdot \varepsilon + 0\right) \cdot \sin \color{blue}{\left(0.5 \cdot \left(x + \left(x + \varepsilon\right)\right)\right)}\right)
\] |
+-commutative [<=]99.2% | \[ -2 \cdot \left(\sin \left(0.5 \cdot \varepsilon + 0\right) \cdot \sin \left(0.5 \cdot \left(x + \color{blue}{\left(\varepsilon + x\right)}\right)\right)\right)
\] |
Taylor expanded in eps around 0 99.8%
Simplified99.8%
[Start]99.8% | \[ 0.041666666666666664 \cdot \left({\varepsilon}^{4} \cdot \cos x\right) + \left(-0.5 \cdot \left({\varepsilon}^{2} \cdot \cos x\right) + \left(-1 \cdot \left(\varepsilon \cdot \sin x\right) + -2 \cdot \left({\varepsilon}^{3} \cdot \left(-0.0625 \cdot \sin x + -0.020833333333333332 \cdot \sin x\right)\right)\right)\right)
\] |
|---|---|
associate-+r+ [=>]99.8% | \[ \color{blue}{\left(0.041666666666666664 \cdot \left({\varepsilon}^{4} \cdot \cos x\right) + -0.5 \cdot \left({\varepsilon}^{2} \cdot \cos x\right)\right) + \left(-1 \cdot \left(\varepsilon \cdot \sin x\right) + -2 \cdot \left({\varepsilon}^{3} \cdot \left(-0.0625 \cdot \sin x + -0.020833333333333332 \cdot \sin x\right)\right)\right)}
\] |
+-commutative [=>]99.8% | \[ \color{blue}{\left(-1 \cdot \left(\varepsilon \cdot \sin x\right) + -2 \cdot \left({\varepsilon}^{3} \cdot \left(-0.0625 \cdot \sin x + -0.020833333333333332 \cdot \sin x\right)\right)\right) + \left(0.041666666666666664 \cdot \left({\varepsilon}^{4} \cdot \cos x\right) + -0.5 \cdot \left({\varepsilon}^{2} \cdot \cos x\right)\right)}
\] |
if 0.00139999999999999999 < eps Initial program 54.9%
Applied egg-rr98.8%
[Start]54.9% | \[ \cos \left(x + \varepsilon\right) - \cos x
\] |
|---|---|
cos-sum [=>]98.8% | \[ \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x
\] |
sub-neg [=>]98.8% | \[ \color{blue}{\left(\cos x \cdot \cos \varepsilon + \left(-\sin x \cdot \sin \varepsilon\right)\right)} - \cos x
\] |
Simplified98.9%
[Start]98.8% | \[ \left(\cos x \cdot \cos \varepsilon + \left(-\sin x \cdot \sin \varepsilon\right)\right) - \cos x
\] |
|---|---|
+-commutative [=>]98.8% | \[ \color{blue}{\left(\left(-\sin x \cdot \sin \varepsilon\right) + \cos x \cdot \cos \varepsilon\right)} - \cos x
\] |
distribute-lft-neg-in [=>]98.8% | \[ \left(\color{blue}{\left(-\sin x\right) \cdot \sin \varepsilon} + \cos x \cdot \cos \varepsilon\right) - \cos x
\] |
*-commutative [=>]98.8% | \[ \left(\color{blue}{\sin \varepsilon \cdot \left(-\sin x\right)} + \cos x \cdot \cos \varepsilon\right) - \cos x
\] |
fma-def [=>]98.9% | \[ \color{blue}{\mathsf{fma}\left(\sin \varepsilon, -\sin x, \cos x \cdot \cos \varepsilon\right)} - \cos x
\] |
*-commutative [=>]98.9% | \[ \mathsf{fma}\left(\sin \varepsilon, -\sin x, \color{blue}{\cos \varepsilon \cdot \cos x}\right) - \cos x
\] |
Taylor expanded in eps around inf 98.8%
Simplified99.1%
[Start]98.8% | \[ \left(-1 \cdot \left(\sin x \cdot \sin \varepsilon\right) + \cos x \cdot \cos \varepsilon\right) - \cos x
\] |
|---|---|
neg-mul-1 [<=]98.8% | \[ \left(\color{blue}{\left(-\sin x \cdot \sin \varepsilon\right)} + \cos x \cdot \cos \varepsilon\right) - \cos x
\] |
associate--l+ [=>]98.9% | \[ \color{blue}{\left(-\sin x \cdot \sin \varepsilon\right) + \left(\cos x \cdot \cos \varepsilon - \cos x\right)}
\] |
*-commutative [<=]98.9% | \[ \left(-\sin x \cdot \sin \varepsilon\right) + \left(\color{blue}{\cos \varepsilon \cdot \cos x} - \cos x\right)
\] |
distribute-rgt-neg-in [=>]98.9% | \[ \color{blue}{\sin x \cdot \left(-\sin \varepsilon\right)} + \left(\cos \varepsilon \cdot \cos x - \cos x\right)
\] |
fma-def [=>]99.1% | \[ \color{blue}{\mathsf{fma}\left(\sin x, -\sin \varepsilon, \cos \varepsilon \cdot \cos x - \cos x\right)}
\] |
*-commutative [=>]99.1% | \[ \mathsf{fma}\left(\sin x, -\sin \varepsilon, \color{blue}{\cos x \cdot \cos \varepsilon} - \cos x\right)
\] |
*-rgt-identity [<=]99.1% | \[ \mathsf{fma}\left(\sin x, -\sin \varepsilon, \cos x \cdot \cos \varepsilon - \color{blue}{\cos x \cdot 1}\right)
\] |
distribute-lft-out-- [=>]99.1% | \[ \mathsf{fma}\left(\sin x, -\sin \varepsilon, \color{blue}{\cos x \cdot \left(\cos \varepsilon - 1\right)}\right)
\] |
sub-neg [=>]99.1% | \[ \mathsf{fma}\left(\sin x, -\sin \varepsilon, \cos x \cdot \color{blue}{\left(\cos \varepsilon + \left(-1\right)\right)}\right)
\] |
metadata-eval [=>]99.1% | \[ \mathsf{fma}\left(\sin x, -\sin \varepsilon, \cos x \cdot \left(\cos \varepsilon + \color{blue}{-1}\right)\right)
\] |
+-commutative [=>]99.1% | \[ \mathsf{fma}\left(\sin x, -\sin \varepsilon, \cos x \cdot \color{blue}{\left(-1 + \cos \varepsilon\right)}\right)
\] |
Final simplification99.4%
| Alternative 1 | |
|---|---|
| Accuracy | 99.2% |
| Cost | 40136 |
| Alternative 2 | |
|---|---|
| Accuracy | 99.2% |
| Cost | 40008 |
| Alternative 3 | |
|---|---|
| Accuracy | 99.1% |
| Cost | 39044 |
| Alternative 4 | |
|---|---|
| Accuracy | 99.1% |
| Cost | 32777 |
| Alternative 5 | |
|---|---|
| Accuracy | 75.6% |
| Cost | 26692 |
| Alternative 6 | |
|---|---|
| Accuracy | 66.3% |
| Cost | 19844 |
| Alternative 7 | |
|---|---|
| Accuracy | 76.5% |
| Cost | 13632 |
| Alternative 8 | |
|---|---|
| Accuracy | 76.5% |
| Cost | 13632 |
| Alternative 9 | |
|---|---|
| Accuracy | 69.2% |
| Cost | 13513 |
| Alternative 10 | |
|---|---|
| Accuracy | 67.3% |
| Cost | 13449 |
| Alternative 11 | |
|---|---|
| Accuracy | 67.4% |
| Cost | 13449 |
| Alternative 12 | |
|---|---|
| Accuracy | 47.3% |
| Cost | 6857 |
| Alternative 13 | |
|---|---|
| Accuracy | 22.0% |
| Cost | 320 |
| Alternative 14 | |
|---|---|
| Accuracy | 13.0% |
| Cost | 64 |
herbie shell --seed 2023165
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))