problem with fixed point butterworth implementation
The question is how did you do the shift to fixed point. The main key here is that you're trying to preserve all the dynamic range.

If all your filter constants are between 0 and 5, let's say, if you use 64bit you will have very little dynamic range because it is impossible to do 1.3, you can just do integers.

What is typically done, for example, is to use 16 bit as Q1.15. This means that you have a range from -1 to 0.999969482421875.  Here each bit corresponde to 2^(-15). 

A consequence of this is that you need to scale your input so that your maximum is constrained to -1/1. If you're reading values from an ADC, for example, that's quite straightforward to do because you know the maximum value that can be read. 

For a second order filter 16bit should be more than enough dynamic range, unless you're frequency range is also huge.