# convolution got the wrong result

Hi, English is not my mother language, so I am trying to make myself clear. And sorry for my grammer mistakes.

I am new to sage and trying to do convolution:f(x) * g(x)?

f(x) = 2, -2 < x < 2; f(x) = 0, x < -2 or x > 2

g(x) = 3/4, 0 < x < 2; g(x) = 0, x < 0 or x > 2

I use the following code to do the job:

```
x = PolynomialRing(QQ,'x').gen()
f = Piecewise([[(-2, 2), 2 * x^0]])
show(f)
g = Piecewise([[(0, 2), 3/4 * x^0]])
show(g)
m = g.convolution(f)
show(m)
```

I think I am sure the result should be:

3/2 * x + 3, -2 < x < 0;

3, 0 < x < 2

-3/2 * x + 6, 2 < x < 4

0, x < -2 or x > 4

but it comes out that when 0 < x < 2, the result is 6, which should be 3. There must be something wrong, but I can not figure out. So I am here to ask for help.

Thank you.

Tough nut! I think you are right about the answer being 3 there. You can see the code by typing `g.convolution??` and seeing what you get at the end. I'm wondering whether the wrong branch of the code is being taken at `if a1-b1<a2-b2:` but="" unfortunately="" have="" no="" definite="" answer="" for="" you="" yet="" on="" how="" to="" fix="" this.<="" p="">

@yideey: By the way, you can fix this yourself by opening the file at devel/sage/sage/functions/piecewise.py and making this switch of `fg2` and `fg4`, then running `sage -b`, which should work okay since it uses the Python included in Sage.

@kcrisman: Thanks for your help. And I am glad that we find the bug.