Is there a way of changing the formula so it calculates in int instead of float?
Of course there is
unsigned int x
void loop()
{
x = (64 *x -10 * (x - analogRead(PIN) ))/64;
}
// 64 gives a quick bitshift for division and 0.15 * 64 = 9.6 => 10
the max value is 1023 so 64 *1023 does not overflow!
the 10 can be replaced by (0..64) giving different weights to the oldvalue and the new value.
Test the difference in memory (sketch size) and speed (e.g. 10000 calls).