View Single Post
  #1  
Old 11-22-2003, 01:15 PM
Scorpious2k's Avatar
Scorpious2k
Demi-God
 
Join Date: Mar 2003
Location: USA
Posts: 1,067
Default dist calculations

Took a little time to look at the dist calcs... in Mob:ist it reads

Code:
float Mob::Dist(const Mob &other) {
    double xDiff = other.x_pos - x_pos; 	
     double yDiff = other.y_pos - y_pos; 	
     double zDiff = other.z_pos - z_pos;
     return sqrt( (xDiff * xDiff) 
 	           + (yDiff * yDiff)
                     + (zDiff * zDiff) ); 
}
Which looks about as efficient as you can get without going to assembler... but if you went to that level it might look like

Code:
float Mob::Dist(const Mob &other) 
{ 	
         double xDiff = other.x_pos - x_pos;
 	double yDiff = other.y_pos - y_pos;
 	double zDiff = other.z_pos - z_pos;
	double calctemp;
	float calcdist;

	__asm 
	{
		fld	xDiff
		fmul	xDiff
		fst	calctemp
		fld	yDiff
		fmul	yDiff
		fadd	calctemp
		fst	calctemp
		fld	zDiff
		fmul	zDiff
		fadd	calctemp
		fsqrt
		fst	calcdist
	}
	return calcdist;
}
Which might run in under 500 cycles....

Haven't tested this mind you, just a thought
__________________
Maybe I should try making one of these servers...
Reply With Quote