Maybe I misunderstood the meaning of your question "don't you have a calculator?"
One variable. Two constants. Two operations. Only one is needed, if you divide 60000000 by 360 beforehand.
By the way, 60000000 is not an int. The compiler will treat it as one, because you didn't tell it otherwise.
Of course, they are reported as integer values.
Because a long was stored in a float. The print() method doesn't bother with printing a long string of 0s. It doesn't mean that it is proper to mix types that way.
Umm, I simply don't know, actually.
You need to learn, then. Copying a multibyte value requires copying each byte. If the value being copied changes during the copy, the copy will not necessarily match either the before change or after change value. Take the case of an int that you are copying. Suppose the value is 0xFFFF. You start to copy the value. The high order byte gets copied. Then, an interrupt occurs, and the value gets incremented, and overflows, becoming 0x0000. The ISR ends, and the low order byte gets copied. The copy will then contain 0xFF00. Hardly what you'd want.
The solution is to disable interrupts while the copy is performed, and then re-enable them.
I am not implying here that c_lastpulse = micros() is the last time a pulse occurred.
Yes, you are. That's what the name says.
The last time it occurred, is c_lastpulse - p_lastpulse.
No. The last time a pulse occurred is p_lastpulse. The time since the last pulse occurred is now (which you call c_lastpulse) minus then (p_lastpulse).
Sampling at 50ms intervals for example, will produce a different level of accuracy at 1000rpm than it would at 7000rpm.
Nope. You need to study the terms precision and accuracy. They refer to very different things.
There are two ways to deal with the problem. One is to count pulses in a given window. The other is to time how long n pulses take to happen.
You are trying to mash the two approaches together, with less than stellar success.
My point is, that the value of rpm displayed with button presses is non zero, whilst dpm displays as 0.
Then, you probably need to ask that the value be printed with more decimal places.