Calculating the difference in a set of variables in percent

Thanks peter,

for the sake of having more numbers to play with i stopped dividing the 2 sets of pulses for drive and non drive and just add them. This is working better but I want to speed it up and implement some kind of smoothing. i also thought about instead of counting pulses i should somehow time the pulses for better resolution; the shorter the time between pulses the faster the wheel turns. so i could have the program react even faster than ever 100ms. i could take 5-10 samples and use that for smoothing and still have it react faster than this at 200ms.
or am i going about this all wrong and should i just calculate the slip on the fly and get rid of the delay function? if i do that though then i'll really have a problem with resolution; right now i have to wait 200ms to get enough pulses to do decent math with any shorter and the error goes through the roof

here is the code as it sits:

  const int TxPin = 6;
  const int output = 11;
#include <SoftwareSerial.h>
SoftwareSerial mySerial = SoftwareSerial(255, TxPin);
  int pot = A0;
  volatile int pulse0 = 0;
  volatile int pulse1 = 0;
  volatile int pulse2 = 0;
  volatile int pulse3 = 0;
  volatile int drive = 0;
  volatile int nondrive = 0;
  volatile int diff = 0;
  volatile int slip = 0;
  volatile int threshold = 0;
  volatile int overslip = 0;
  
void setup() {
  mySerial.begin(9600);
  pinMode(TxPin, OUTPUT);
  digitalWrite(TxPin, HIGH);
  mySerial.write(22);
  mySerial.write(17);
  mySerial.write(212);                  // set Quarter note tone
  mySerial.write(220);                  // A note tone
  mySerial.write(12);                   // blank disp
  mySerial.print("CompJLT INC");        // First line
  mySerial.write(13);                   // Form feed
  mySerial.print("Traction Control");   // Second line
  delay(4000);
  mySerial.write(12); 
  attachInterrupt(0, count0, RISING);
  attachInterrupt(1, count1, RISING);
  attachInterrupt(2, count2, RISING);
  attachInterrupt(3, count3, RISING);
 
}
void loop() {
  mySerial.write(12);
  delay(5);
  noInterrupts();
  drive = pulse0 + pulse1;
  nondrive = pulse3 + pulse3;
  diff = (drive - nondrive);
  slip = (100 * diff) / nondrive;
  interrupts();  
  mySerial.print(drive);
  mySerial.print("/");
  mySerial.print(nondrive);
  mySerial.print(" ");
  mySerial.write(13);  
  mySerial.print("S:");
  mySerial.print(slip);
  threshold = analogRead(pot);
  threshold = map(threshold, 0, 1023, 0, 100);
  mySerial.print(" T:");
  mySerial.print(threshold);
  
  overslip = slip - threshold;
  if (overslip > 0)
  {
  if (overslip > 100)
  {
  analogWrite(output, 255);
  }
  else
  {    
  overslip = map(overslip, 0, 100, 0, 255);
  analogWrite(output, overslip);
  }
  }
  else
  {
  analogWrite(output, 0);
  }
  
  mySerial.print(" O:");
  mySerial.print(overslip);
    
  pulse0 = 0;
  pulse1 = 0;
  pulse2 = 0;
  pulse3 = 0;
  overslip = 0;
  delay(200);
}
void count0()
{
  pulse0++;
}
void count1()
{
  pulse1++;
}
void count2()
{
  pulse2++;
}
void count3()
{
  pulse3++;
}