| Alternative 1 | |
|---|---|
| Accuracy | 99.5% |
| Cost | 39168 |

(FPCore (x eps) :precision binary64 (- (cos (+ x eps)) (cos x)))
(FPCore (x eps) :precision binary64 (- (* (cos x) (/ (pow (sin eps) 2.0) (- -1.0 (cos eps)))) (* (sin eps) (sin x))))
double code(double x, double eps) {
return cos((x + eps)) - cos(x);
}
double code(double x, double eps) {
return (cos(x) * (pow(sin(eps), 2.0) / (-1.0 - cos(eps)))) - (sin(eps) * sin(x));
}
real(8) function code(x, eps)
real(8), intent (in) :: x
real(8), intent (in) :: eps
code = cos((x + eps)) - cos(x)
end function
real(8) function code(x, eps)
real(8), intent (in) :: x
real(8), intent (in) :: eps
code = (cos(x) * ((sin(eps) ** 2.0d0) / ((-1.0d0) - cos(eps)))) - (sin(eps) * sin(x))
end function
public static double code(double x, double eps) {
return Math.cos((x + eps)) - Math.cos(x);
}
public static double code(double x, double eps) {
return (Math.cos(x) * (Math.pow(Math.sin(eps), 2.0) / (-1.0 - Math.cos(eps)))) - (Math.sin(eps) * Math.sin(x));
}
def code(x, eps): return math.cos((x + eps)) - math.cos(x)
def code(x, eps): return (math.cos(x) * (math.pow(math.sin(eps), 2.0) / (-1.0 - math.cos(eps)))) - (math.sin(eps) * math.sin(x))
function code(x, eps) return Float64(cos(Float64(x + eps)) - cos(x)) end
function code(x, eps) return Float64(Float64(cos(x) * Float64((sin(eps) ^ 2.0) / Float64(-1.0 - cos(eps)))) - Float64(sin(eps) * sin(x))) end
function tmp = code(x, eps) tmp = cos((x + eps)) - cos(x); end
function tmp = code(x, eps) tmp = (cos(x) * ((sin(eps) ^ 2.0) / (-1.0 - cos(eps)))) - (sin(eps) * sin(x)); end
code[x_, eps_] := N[(N[Cos[N[(x + eps), $MachinePrecision]], $MachinePrecision] - N[Cos[x], $MachinePrecision]), $MachinePrecision]
code[x_, eps_] := N[(N[(N[Cos[x], $MachinePrecision] * N[(N[Power[N[Sin[eps], $MachinePrecision], 2.0], $MachinePrecision] / N[(-1.0 - N[Cos[eps], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(N[Sin[eps], $MachinePrecision] * N[Sin[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\cos \left(x + \varepsilon\right) - \cos x
\cos x \cdot \frac{{\sin \varepsilon}^{2}}{-1 - \cos \varepsilon} - \sin \varepsilon \cdot \sin x
Herbie found 9 alternatives:
| Alternative | Accuracy | Speedup |
|---|
Results
Initial program 83.7%
Applied egg-rr99.1%
[Start]83.7% | \[ \cos \left(x + \varepsilon\right) - \cos x
\] |
|---|---|
sub-neg [=>]83.7% | \[ \color{blue}{\cos \left(x + \varepsilon\right) + \left(-\cos x\right)}
\] |
cos-sum [=>]99.1% | \[ \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} + \left(-\cos x\right)
\] |
associate-+l- [=>]99.1% | \[ \color{blue}{\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon - \left(-\cos x\right)\right)}
\] |
fma-neg [=>]99.1% | \[ \color{blue}{\mathsf{fma}\left(\cos x, \cos \varepsilon, -\left(\sin x \cdot \sin \varepsilon - \left(-\cos x\right)\right)\right)}
\] |
Applied egg-rr99.1%
[Start]99.1% | \[ \mathsf{fma}\left(\cos x, \cos \varepsilon, -\left(\sin x \cdot \sin \varepsilon - \left(-\cos x\right)\right)\right)
\] |
|---|---|
sub-neg [=>]99.1% | \[ \mathsf{fma}\left(\cos x, \cos \varepsilon, -\color{blue}{\left(\sin x \cdot \sin \varepsilon + \left(-\left(-\cos x\right)\right)\right)}\right)
\] |
remove-double-neg [=>]99.1% | \[ \mathsf{fma}\left(\cos x, \cos \varepsilon, -\left(\sin x \cdot \sin \varepsilon + \color{blue}{\cos x}\right)\right)
\] |
fma-neg [<=]99.1% | \[ \color{blue}{\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon + \cos x\right)}
\] |
fma-def [=>]99.1% | \[ \cos x \cdot \cos \varepsilon - \color{blue}{\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}
\] |
Applied egg-rr99.1%
[Start]99.1% | \[ \cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)
\] |
|---|---|
fma-udef [=>]99.1% | \[ \cos x \cdot \cos \varepsilon - \color{blue}{\left(\sin x \cdot \sin \varepsilon + \cos x\right)}
\] |
+-commutative [<=]99.1% | \[ \cos x \cdot \cos \varepsilon - \color{blue}{\left(\cos x + \sin x \cdot \sin \varepsilon\right)}
\] |
associate--r+ [=>]99.1% | \[ \color{blue}{\left(\cos x \cdot \cos \varepsilon - \cos x\right) - \sin x \cdot \sin \varepsilon}
\] |
cancel-sign-sub-inv [=>]99.1% | \[ \color{blue}{\left(\cos x \cdot \cos \varepsilon - \cos x\right) + \left(-\sin x\right) \cdot \sin \varepsilon}
\] |
*-commutative [=>]99.1% | \[ \left(\color{blue}{\cos \varepsilon \cdot \cos x} - \cos x\right) + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
*-un-lft-identity [=>]99.1% | \[ \left(\cos \varepsilon \cdot \cos x - \color{blue}{1 \cdot \cos x}\right) + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
distribute-rgt-out-- [=>]99.1% | \[ \color{blue}{\cos x \cdot \left(\cos \varepsilon - 1\right)} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
Applied egg-rr99.5%
[Start]99.1% | \[ \cos x \cdot \left(\cos \varepsilon - 1\right) + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
|---|---|
flip-- [=>]98.9% | \[ \cos x \cdot \color{blue}{\frac{\cos \varepsilon \cdot \cos \varepsilon - 1 \cdot 1}{\cos \varepsilon + 1}} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
frac-2neg [=>]98.9% | \[ \cos x \cdot \color{blue}{\frac{-\left(\cos \varepsilon \cdot \cos \varepsilon - 1 \cdot 1\right)}{-\left(\cos \varepsilon + 1\right)}} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
metadata-eval [=>]98.9% | \[ \cos x \cdot \frac{-\left(\cos \varepsilon \cdot \cos \varepsilon - \color{blue}{1}\right)}{-\left(\cos \varepsilon + 1\right)} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
sub-1-cos [=>]99.5% | \[ \cos x \cdot \frac{-\color{blue}{\left(-\sin \varepsilon \cdot \sin \varepsilon\right)}}{-\left(\cos \varepsilon + 1\right)} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
pow2 [=>]99.5% | \[ \cos x \cdot \frac{-\left(-\color{blue}{{\sin \varepsilon}^{2}}\right)}{-\left(\cos \varepsilon + 1\right)} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
Simplified99.5%
[Start]99.5% | \[ \cos x \cdot \frac{-\left(-{\sin \varepsilon}^{2}\right)}{-\left(\cos \varepsilon + 1\right)} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
|---|---|
remove-double-neg [=>]99.5% | \[ \cos x \cdot \frac{\color{blue}{{\sin \varepsilon}^{2}}}{-\left(\cos \varepsilon + 1\right)} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
neg-sub0 [=>]99.5% | \[ \cos x \cdot \frac{{\sin \varepsilon}^{2}}{\color{blue}{0 - \left(\cos \varepsilon + 1\right)}} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
+-commutative [=>]99.5% | \[ \cos x \cdot \frac{{\sin \varepsilon}^{2}}{0 - \color{blue}{\left(1 + \cos \varepsilon\right)}} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
associate--r+ [=>]99.5% | \[ \cos x \cdot \frac{{\sin \varepsilon}^{2}}{\color{blue}{\left(0 - 1\right) - \cos \varepsilon}} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
metadata-eval [=>]99.5% | \[ \cos x \cdot \frac{{\sin \varepsilon}^{2}}{\color{blue}{-1} - \cos \varepsilon} + \left(-\sin x\right) \cdot \sin \varepsilon
\] |
Final simplification99.5%
| Alternative 1 | |
|---|---|
| Accuracy | 99.5% |
| Cost | 39168 |
| Alternative 2 | |
|---|---|
| Accuracy | 99.2% |
| Cost | 32512 |
| Alternative 3 | |
|---|---|
| Accuracy | 99.2% |
| Cost | 26176 |
| Alternative 4 | |
|---|---|
| Accuracy | 85.4% |
| Cost | 13632 |
| Alternative 5 | |
|---|---|
| Accuracy | 85.1% |
| Cost | 13120 |
| Alternative 6 | |
|---|---|
| Accuracy | 83.7% |
| Cost | 12992 |
| Alternative 7 | |
|---|---|
| Accuracy | 83.2% |
| Cost | 6592 |
| Alternative 8 | |
|---|---|
| Accuracy | 74.1% |
| Cost | 320 |
| Alternative 9 | |
|---|---|
| Accuracy | 72.3% |
| Cost | 64 |
herbie shell --seed 2023243
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))