Code:
else if( fCriticalBonus > 500.0f )
fCriticalBonus = 150.0f;
I see no reason why you want to set the CritBonus back to 150 when it is over 500, because that'd mean a player with 499 Critbonus would have far more bonus than a player with 501 CritBonus.
The 500.0f refers to a "float" value.
500 will be converted to the 500.0f in general, though using 500 instead of 500.0f will cause a warning because 500 is an int value, while 500.0f is as I said a float value.
The warning will be produced because int and float are different types, it would also produce a warning when you compare a unsigned int with a (signed) int.
To understand why it is like that , you should take a look at a documentation of the different types in C++.