CMP EMBEDDED.COM

Login | Register     Welcome Guest ESC Boston  esc india  Call for Abstracts
 

Listing 2: Multiply and divide for 32-bit variables Listing 2: Multiply and divide for 32-bit variables

int MULT11_21(FIXED11_21 a, FIXED11_21 b)
{
int temp,result;
char sign = 0;
if (a.full < 0)
{
sign = 1;
a.full = -a.full;
}
if (b.full < 0)
{
sign^ = 1;
b.full = -b.full;
}
result = (((a.full & 0x0000FFFF) * (b.full & 0x0000FFFF))+1048576)>>21;
result = result + ((((a.full>>16) * (b.full & 0x0000FFFF))+16)>>5);
result = result + ((((b.full>>16) * (a.full & 0x0000FFFF))+16)>>5);
temp = (a.full>>16) * (b.full>>16);
result = result + (temp<<11);
return (result * -sign);
}
int DIV11_21(FIXED11_21 a, FIXED11_21 b)
{
double temp;
FIXED11_21 result;
unsigned char sign = 0;
temp = (double)a.full/(double)b.full;
if (temp<0)
{
temp = -temp;
sign = 1;
}
result.part.integer = temp;
result.part.fraction = ((temp-result.part.integer)*4194304 + 1)/2;
result.part.integer *= -sign;
return (result.full);
}
Embedded.com Career Center
Ready to take that job and shove it?
SEARCH JOBS

Browse all jobs

SPONSOR
RECENT JOB POSTINGS


 :