Straight from attack.cpp:
Code:
weapon_speed = ((int)(weapon_speed*(100.0f+attack_speed)*PermaHaste) / 100);
if(weapon_speed < 10) // fast as a client can swing, so should be the floor of the proc chance
weapon_speed = 10;
ProcBonus += (float(itembonuses.ProcChance + spellbonuses.ProcChance) / 1000.0f + AABonus);