The math for haste breakpoints is pretty simple:
N=number of ticks
T0=default tick duration
T=hasted tick duration
D0=default buff duration
D=buff duration in presence of spell haste
T=T0/(1+totalSpellHaste)
N=bankersRound(D0/T)
D=N*T
Note that totalSpellHaste isn't a linear addition. It's
totalHaste=(1+hasteRating/425/100)*(1+SoI)*(1.05)*(1+bloodlust)
spellHasteBuff=0.05 (if the buff is active, else 0)
bloodlust=0.3 (if the buff is active, else 0)
So for example, let's say you have 4% haste on gear and the Spell Haste buff. Your total spell haste is 1.04*1.05-1=0.092, or 9.2%. Your hasted tick duration is T=6/(1.092)=5.49450 seconds, so you'll get a number of ticks equal to N=bankersRound(30/5.49450)=bankersRound(5.46)=5. No extra tick, so your total buff duration is D=N*T=5*5.49450=27.4725 seconds.
Bump that up to 6% haste from gear. Now your total spell haste is 11.3%, tick duration is T=6/1.113=5.3908 seconds, and N=bankersRound(30/5.3908)=bankersRound(5.56)=6. Aha, extra tick! New buff duration is D=6*5.3908=32.3448 seconds.
It should be pretty clear from this that you get a new tick every time the argument of bankersRound() ends in 0.5
*; so when 30/T=5.5, 6.5, 7.5, 8.5, etc. If we do a little math, we can see what those spell haste breakpoints are:
Code:
N = bankersRound(D0/T) = bankersRound(D0/(T0/(1+totalSpellHaste))
= bankersRound((D0/T0)*1+totalSpellHaste)
= bankersRound(D0/T0 + D0/T0*totalSpellHaste)
Now D0/T0 is just 30/6=5. plugging that in:
Code:
N = bankersRound(5 + 5*totalSpellHaste)
So any time 5*totalSpellHaste reaches a value that ends in 0.5. Namely, at 10% (5*0.1=5), 30% (5*0.3=1.5), 50% (5*0.5=2.5), 70% (5*0.7=3.5), and every additional 20%.
Thus, your haste break points for getting new ticks are 10%, 30%, 50%, 70%, etc.
* This is only partly true because we're using banker's Rounding, where we always round to the nearest
even number if the number to be rounded ends in exactly 0.50. So in theory, if we had 10% haste, we'd be rounding 5.5 up to 6, granting us a new tick. If we're at 30% haste though, we're rounding 6.5
down to 6, which doesn't get us a new tick. However, as soon as we hit 30.001% haste, we have 6.5005, which gets rounded up. I don't know how many decimal places the game stores these values to (probably very many), but it's not likely to matter too much. It only becomes an issue if you land exactly on a given value (ex: exactly at 30*425=12750 rating, without having spell haste buff). So in the absence of the spell haste buff, you get new ticks at:
4250 rating, 1275
1 rating, 21250 rating, 2975
1 rating, etc.
With the spell haste buff, you're far less likely to land on an exact break point. The break points are:
4047.619 rating, 12142.857 rating, 20238.095 rating, 28333.333 rating, etc. Since we're generally going to round all of those up to ensure the next tick (i.e. 4048 rating, 12143 rating, 20239 rating, 28334 rating, etc.) we're automatically over the exact 0.50000 threshold. So in practice, we don't need to worry so much about the difference between banker's rounding and regular rounding.
Feel free to use the content of this message in your discussion. I may turn it into a quickie blog post in the next week or so, it seems like something most people would like to see mathed out.