Here's the formula for calculating the total run/walk bonus from items:
<> -- round down
{} -- round up
Base_run_walk_frame = 22
Skill_Bonus => (Barb's Increased Speed %, Pally's Vigor %, Assasin's Burst of speed %)
Real_Item_Bonus =
<(120*Total_Item_Bonus)/(120+Total_Item_Bonus)>
Total_Walk_Bonus =
Skill_Bonus + Real_Item_Bonus
Real_Walk_Frames =
{256*(Base_Run_Walk_Frame +1)/<(100+ Total_Walk_Bonus )/100*256>}-1
Here's the tricky part, Blizzard apparently applied the diminish return formula to Total_Walk_Bonus once again to get the Total_Run_Bonus.
Total_Run_Bonus =
<(120*Total_Walk_Bonus )/(120+Total_Walk_Bonus )>
Real_Run_Frames =
{256*(Base_Run_Walk_Frame +1)/<(100+ Total_Run_Bonus )/100*256>}-1