[GUIDE] Calculate your effective Sharpshooter DPS!

Demon Hunter

Hey guys,

I am sure many of you wonder (like myself) what the REAL impact is that sharpshooter has on your DPS. Since I am no genius with discrete probability calculations, I thought I'd give Monte Carlo simulations a try. In principle this just means simulating alot of attacks under different conditions and drawing conclusions from that.

The Raw Data

I inspected a range of attack speeds from 1 to 2 attacks per second and a range of base crit chance (read: crit chance without sharpshooter) from 5 to 30 percent as a 2D datagrid. The data looks like this:


As we can see, both lower attack speed and lower base crit chance make sharpshooter better.

Using the Raw Data

The data can be obtained:
As Excel sheet:
As plain text (tab delimited):

Now how do these crit chances translate into raw DPS increase? To find this out, replace sharpshooter with say Brooding (the best talent ever), and note your crit chance as well as your attack speed. Look up your crit chance gain in the data sheet and multiply it with (1 + crit damage bonus / 100). This is your relative DPS gain. Multiply this with 100 to get your DPS gain in percent. In formulas:

Relative DPSGain = CritChanceGain * (1 + CritDmgBonus/100)
DPSGain[%] = 100 * Relative DPSGain


xxxDarkShadowKillerLegolasGimliLoLxxx has 20% base crit chance, a 2hand xbow with 1.1 attack speed and +210% crit damage bonus. If we look up the CritChanceGain in the table, we see that it is at 0.066 (6.6 percent). So his DPS gain would be 0.066 * (1 + 2.1) = 0.205 or 20.5%! Sharpshooter is therefore probably better in this case than Steady Aim or Cull the Weak.

Final Remarks

Please note that these calculations assume continuous attacking; you will most certainly benefit a bit more from sharpshooter than what is shown here because you cannot attack all the time (which effectively lowers your attack speed) and because you have the added benefit of (roughly) 100% crit chance when opening on a mob group.

Technical Mumbo-Chumbo

For those interested, the Monte Carlo simulations look as follows in pseudo-code (I averaged 10000 iterations per data point):

LastCritTime = 0;
for i = 1:nAttacksMax
Time = i / AttackSpeed;

CritChanceGain = floor(Time - LastCritTime) * 0.03;
CritChance = BaseCritChance + CritChanceGain;

iRand = rand[0,1];
isCrit = iRand < CritChance;

if isCrit
LastCritTime = Time;

Join the Conversation

Return to Forum