How do i stop my variables from giving me NaN?

Hey there! Although I’m not new to As3 I’m also not good at it. To get a better understanding of it all i decided to make a sandbox from scratch. I already got some basic functionality in but my velocity is for some reason set to NaN when distance is 0 and acceleration is set to 2 meters per a second. To understand how faulty that is, the program translates your resolution to real life meters. :wasted:

Any way could some one explain to me why im getting these values, and better yet, what i can do to stop them.

Code:

//Used to calculate d.
var OBJECT_OLD_X;
var OBJECT_OLD_Y;


//Used to calculate pixel to meter ratio
var DPI = Capabilities.screenDPI;
var RES_X = Capabilities.screenResolutionX;
var RES_Y = Capabilities.screenResolutionY;
var RATIO_X = (RES_X/DPI)/39.370;
var RATIO_Y = (RES_Y/DPI)/39.370;
var RATIO_X_PIXEL = RATIO_X/RES_X;
var RATIO_Y_PIXEL = RATIO_Y/RES_Y;


//Used to tell program what direction the object was moving in.
var NEGITIVE_X = 1;
var NEGITIVE_Y = 1;


//A few physics vars.


//Distence.
var d;
//Mass, Currently set to the mass of a tenis ball. (Or so i beleve.)
var m = 0.058;


//Velocity.
var v;
//Acceleration
var a;
//Momentum
var p;


//Event listeners linked to drag&drop and onEnterFrame snipets.
addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
OBJECT.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);


//Does most of the updating.
function fl_EnterFrameHandler(event:Event):void
{
    
    
    //Originaly Stoped a & d from being NaN. Doesnt work in some instences.
    /*if(a == false)
    {
        a = 0.00001;
    }*/
    
    /*if(d == false)
    {
        d = 0.00001;
    }*/
    
    //Calculates distence. ^2 Doesnt work for what ever reason so i was forced to copy paste and multiply.
    d = Math.sqrt((((OBJECT.x - OBJECT_OLD_X)*RATIO_X_PIXEL)*((OBJECT.x - OBJECT_OLD_X)*RATIO_X_PIXEL))+(((OBJECT.y - OBJECT_OLD_Y)*RATIO_Y_PIXEL)*((OBJECT.y - OBJECT_OLD_Y)*RATIO_Y_PIXEL)));
    
    //Physics stuffs, nothing to see here.
    v = (d*d)/(d*(1/30));
    p = v*m;
    a = ((d*v)/(d*(1/30)))^2;
    
    
    //Sets the NEGITIVE vars to 1 or -1 based on positions. 
    if(OBJECT.x - OBJECT_OLD_X < 0)
    {
        NEGITIVE_X = -1;
    }
    else if(OBJECT.X - OBJECT_OLD_X > 0)
    {
        NEGITIVE_X = 1;
    }
    
    if(OBJECT.Y - OBJECT_OLD_Y < 0)
    {
        NEGITIVE_Y = -1;
    }
    else if(OBJECT.Y - OBJECT_OLD_Y < 0)
    {
        NEGITIVE_Y = 1;
    }
    
    
    //Moves OBJECT based on vars.
    OBJECT.x = OBJECT.x + p*NEGITIVE_X + a*NEGITIVE_X;
    OBJECT.y = OBJECT.y + p*NEGITIVE_Y + a*NEGITIVE_Y;
    
    //Some debugging tools.
    trace("Distence = " + d + " meters");
    trace("Velocity = " + v + " meters/s");
    trace("Aceleration = " + a + " meters/s");
    //trace(RATIO_X);
    //trace(RATIO_Y);
    //trace(RATIO_X_PIXEL);
    //trace(RATIO_Y_PIXEL);
    
    //Updates OBJECT OLD for next frame.
    OBJECT_OLD_X = OBJECT.x;
    OBJECT_OLD_Y = OBJECT.y;
}


//Drag and drop snippet. Used for debuggig.
function fl_ClickToDrag(event:MouseEvent):void
{
    OBJECT.startDrag();
}


stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);


function fl_ReleaseToDrop(event:MouseEvent):void
{
    OBJECT.stopDrag();
}

Thanks in advance, David.

EDIT: I forgot to say that when my OBJECT is not moving it’s positioned at 0, 0.