Instead of counting pulses, why don't you measure the time between them? Or better yet, measure the time it takes to see 12 pulses (or how ever many per rev) for a full rev (call it Trev). Then RPM = 60/Trev. micros() on the arduino is your friend here. If you use long ints and do the math in microseconds you can avoid floating point which is slow. You should get a very stable result.