The only issue with haste is that although the theoretical impact is always constant, the actual impact rarely is. Haste operates on a function of time. The theoretical DPS gain of haste is merely an expression of getting more spells cast within any given time period. However, encounter mechanics do not always allow for an optimal time frame. The shorter that these time frames become, the more the value of haste fluctuates. When speaking about haste theoretically, it is often normalized across a long encounter that lasts several minutes; game mechanics often operate in terms of seconds. For example, there is only a rough 15-second window of time in which a player is able to cast before needing to move during phase 3 of Sindragosa. Within such a short time frame, it takes larger amounts of haste for haste to actually allow a player to cast additional spells. Technically speaking, there is no difference between a 2.5- and a 2.3-second cast spell within this setting. You will still only be able to complete six spell casts within a 15-second time frame. Essentially, this means that the additional haste is wasted.
There are always caveats. In the Sindragosa example, a player may not feel comfortable spending an extra 2.5 seconds after the 15-second mark in order to cast an additional spell; however, they might feel comfortable spending an additional 1.15 seconds to complete their seventh cast. This is why haste is both simple yet complex. In of itself, haste is unchanging, but the situation in which haste is being applied is constantly changing. Although it has little impact on anything in a practical sense, it does make modeling the DPS increase of haste rather difficult. As I said, most models are done around a prolonged period of time, though some have now become more sophisticated to allow for a contingency of movement at various intervals, and this is one of many reasons why a player should use caution when viewing any form of theoretical DPS model.
Calculating cast times
The boring talk aside, let's actually get into the math behind how haste functions. There is a formula for converting haste rating into a haste percentage; however, the character sheet does this automatically, which renders the need to do it on your own rather obsolete. To find a character's haste percentage, just scroll over the haste rating line on the character sheer, either in game or on the armory. Knowing the haste percentage over the rating is important, as a vast majority of haste calculations use the former over the latter.
To calculate a spell's cast time with a specific amount of haste, use the following formula:
New Cast Time = Base Cast Time / (1 + (Haste Percentage / 100))
The base cast time of a spell is merely what that spell's cast time would be without any haste effects. Note, however, that this does include talents which reduce base cast time such as Starlight Wrath
or Improved Fireball
. If you have any such talents, then you absolutely must use the talented cast time as the base cast time; otherwise, your results will be incorrect.
Another important aspect of doing haste calculations, or any calculations for that matter, is to keep in mind that the WoW
servers round to the fourth significant digit. A spell will not have a cast time of 2.54654534687454 or whatever other long result you are inevitably going to end up with; instead, it would have a cast time of 2.5465. There is a little bit of debate among some players as to exactly where Blizzard cuts off for significant figures or if they do at all; however, using the fourth significant digit formula is the common practice and has thus far proven to give highly accurate results. Keep in mind that if you are viewing the spell's cast time in game, the actual digits that are shown may not reflect your actual cast time. Many common mods out there, such as Quartz, will generally round to the either the nearest or the second significant digit when displaying a spell's cast time. This is merely for cosmetic purposes, and the additional thousands of a second that the spell actually takes to cast isn't something you are likely to notice.
If, for whatever reason, you wanted to know how much haste rating you needed in order to reach a specific cast time for a spell, then we've got a formula for that:
Haste from talents and buffs
Haste Rating = ((Base Cast Time / New Cast Time) - 1) * 32.79 * 100
There is one common thing that I have heard from a lot of new players both in game and on the forums, that when they get a buff or talent that increases their haste, the haste displayed on their character sheets doesn't change. This is true. Whenever you gain a talent or buff that increases haste, it will never be displayed on your character sheet. There is a very good reason for that. Haste from talents and effects does not impact your actual haste rating. Instead, all of these effects change your base casting time directly.
If you want to calculate out your cast time with reference to any talents or buffs that increase haste, then you need to use the following formula:
New Cast Time = (Base Cast Time / (Haste Increasing Talents * Haste Increasing Buffs) / (1 + (Haste Percentage / 100))
Note that the haste from talents and the haste from buffs is multiplied, not added. This is because, unlike most other effects, haste buffs and talents stack multiplicatively with one another, not additively. Each one alters the base cast time of the spell independently of any other effects that you might have. The same rule would thus have to be applied if you have multiple buffs or talents that increase haste. As an example, a balance druid with Celestial Focus
, Improved Moonkin Form
and Wrath of Air Totem
applied would have their formula look like this:
New Cast Time = (Base Cast Time / (1.03 * 1.03 * 1.05) / (1 + (Haste Percentage / 100))
It is imperative that you multiply out these effects instead of adding them. If you merely add them all together or add them into your normal haste percentage, then your results are going to be incorrect.
It should also be noted that even with these talents or buffs, it is always safe to use the haste percentage listed on either the character sheet or in the armory. Again, Blizzard does not add these effects onto a player's actual haste, so that number will never change based on talents or buffs that may be present. It is not safe to use the haste percentage listed on Wowhead.com if you are using a player-created profile. Wowhead (and possibly other similar tools) does add haste talents to a player's haste rating just the same as gear. Blizzard does not do this. If you have any haste-increasing talents at all, then using the haste percentage displayed by Wowhead is going to give you an incorrect result. You must first subtract whatever amount of haste that you gain from talents before using the haste percentage displayed.
The global cooldown
The final function of haste is how it interacts with the global cooldown for spells. Keep in mind that this does only apply to spells and not physical abilities such as those used by melee classes and hunters.
Normally, the global cooldown for all spells is fixed at 1.5 seconds. Until that time is up, you will not be able to perform another action. Haste allows a player to reduce that cooldown period by up to .5 seconds. Originally, haste did not do this; however, this limited the value of haste for instant spells and spells with cast times of 1.5 seconds (plus a few other cases wherein players were able to break the standard 1.5 GCD.) How to determine what your new global cooldown will be due to haste uses the exact same formula as that used for determining the new cast time of a spell. The only difference is that in this instance, the base cast time is merely going to be your base GCD.
Generally, the base GCD is going to be 1.5. There are a few glyphs and talents that can change this for certain classes. As with calculating cast time, always use the altered GCD value instead of the standard value first. Remember as well that you cannot drop below a 1-second GCD.
Finally, there is one last formula to mention. If you want to know how much haste it requires in order to reduce the GCD to a specific level, use the following formula:
Haste = (( Base GCD / New GCD) - 1 ) * 100