Delaymicroseconds not accurately working?

int sparkPin=7;

void setup() {
  // put your setup code here, to run once:
pinMode(sparkPin,OUTPUT);
pinMode(13,INPUT);
pinMode(A5,INPUT);
Serial.begin(57600);

}

void loop() {
 
int engspeedV=analogRead(A5);
engspeedV = map(engspeedV, 0, 1023, 1000, 9000);
   double period=spark(engspeedV);
  
  analogWrite(sparkPin,1023);
delay(5);
analogWrite(sparkPin,0);
double finalDelay=round((period-5)*1000);
//delayMicroseconds(finalDelay); //counting up rpm

Serial.println(finalDelay);
 
}

double spark(double rpm)
{
double hz = (1.0/60)*rpm/2;
double slice_duration = 1.0/hz;
return slice_duration*1000;


}