hey all, hope you're having a good weekend. one of my functions isn't returning what i think should be a proper value, so i was hoping to post it, surf around a bit, and then someone will by magic solve all my problems and i don't have to do the work will that person be you?

here's the function:
Code:
int Player::mf_playerStats_battingAve(char fv_mgrDirection)
{
//bunt
	if (fv_mgrDirection=='b'||'B')
	{return ((2*bat_aim)+bat_str+(rand() % lck));}
//left grounder
	if (fv_mgrDirection=='l'||'L')
	{return ((bat_str)+(.75*bat_aim)+(rand() % lck));}
//right grounder
	if (fv_mgrDirection=='r'||'R')
	{return ((bat_str)+(.75*bat_aim)+(rand() % lck));}
//sacrafice fly
	if (fv_mgrDirection=='s'||'S')
	{return ((bat_aim)+(bat_str)+(rand() % lck));}
//homerun********should run this if*************
	if (fv_mgrDirection=='h'||'H')
	{return ((.5*bat_str)+(bat_aim)+(rand() % lck));}
//default
	else
	{return ((.5*bat_str)+(bat_aim)+(rand() % lck));}
}
here's the values acording to the debugger:
bat_aim 10
bat_str 10
fv_mgrDirection 104 'h'
lck 10
+ this 0x0012ff48
rand returned 29372
so, as i see it the equation should read:

(.5*10)+(10)+(2)==19, right?

well, on this occasion it came up with 32. all the returned values tend to be in the low 30's. so what gives? what am i missing? thanks in advance