No, because Holy Vengeance applications occur with every weapon swing *and* every Hammer of the Righteous (HotR). The ones from HotR can be added statically in the fashion you suggest, but the ones that proc from unavoided melee attacks will scale with parryhaste.

In the MATLAB code that I'm using, this is how I calculate the base player attack speed for each class:

Code:

if class=='paladin'
player_attack_speed=1./((2-boss_avoid./100)./player_swing_speed + (2-boss_avoid./100)./6);
elseif class=='warrior'
player_attack_speed=1./(1./player_swing_speed + 33/60);
end

based on the suggestion that a warrior makes 33 parry-able attacks per minute.

In addition, I think I've found your error. First, here's what I get from my simulation using:

parry rating = 251

dodge rating = 775

defense rating = 777

agility from gear = 22

player_base_swing_speed=1.2433687 (from your spreadsheet)

class='warrior'

Code:

Arrays tracking values while we iterate the parry-haste coefficients:
variable Iteration #1 #2 #3 #4 #5
player_swing_speed 1.2434 1.2073 1.2067 1.2068 1.2068
player_attack_speed 0.73841 0.72555 0.72532 0.72534 0.72534
boss_swing_speed 2 1.907 1.9097 1.9095 1.9095
player_parryhaste 1.0298 1.0304 1.0303 1.0303 1.0303
boss_parryhaste 1.0488 1.0473 1.0474 1.0474 1.0474
variable Iteration #1 #2 #3 #4 #5
redux / exp skill 0.00162512 0.00157703 0.00157971 0.00157954 0.00157955
redux / equiv dodge 0.00249452 0.00249452 0.00249452 0.00249452 0.00249452
redux eff (%) 65.1475 63.2199 63.3272 63.3202 63.3207
# extra attacks 7.31304 7.09665 7.1087 7.10791 7.10797
expertise to rem 1 att 4.10226 4.22735 4.22018 4.22065 4.22062
equiv dodge rating 33.6283 34.6537 34.5949 34.5988 34.5985
equiv dod % post-DR 0.470557 0.484804 0.483988 0.484041 0.484038
equiv # att dodged (vs 0.4) 0.740248 0.761611 0.760387 0.760467 0.760462
# att eff (%) 62.442 60.6905 60.7881 60.7817 60.7822
Final values:
player_swing_speed 1.20676
player_attack_speed 0.72534
boss_swing_speed 1.90952
player_parryhaste 1.03033
boss_parryhaste 1.04739
redux / exp skill 0.00157955
redux / equiv dodge 0.00249452
redux eff (%) 63.3207
# extra attacks 7.10797
expertise to rem 1 att 4.22062
equiv dodge rating 34.5985
equiv dod % post-DR 0.484038
equiv # att dodged (vs 0.4) 0.760462
# att eff (%) 60.7822

I then plugged those values into your spreadsheet with A=33 to see what we get.

You calculate "Damage Reduction per expertise gem" properly, though your diff is slightly larger than what I get (~0.0067 rather than 0.00736). However it agrees well enough with what I get if I scale my results up to 20 expertise (0.00157955*20/8.2=0.0039, or 0.39%).

However, when you calculate "Damage reduction per dodge gem," you just calculate the difference in dodge rating, or 0.2806% dodge. That's *not* the same as damage reduction though.

The damage reduction due to that much dodge is properly calculated as follows:

Code:

redux_per_equiv_dodge = 1-(1-player_avoid/100-(dodgedr0-dodgedr)/100)/(1-player_avoid/100);

In other words

1 - (1-avoid%_after)/(1-avoid%_before)

or, since your spreadsheet has 53.77% base avoidance before the gem:

1-(1-0.5377-0.002806)/(1-0.5377) = 0.0061

Which agrees exactly with what I get when I scale up my value of "redux_per_equivalent_dodge" to 20 dodge rating (0.00249452*20/8.2=0.0061=0.61%)

Thus, the ratio of these works out to around 63%, exactly like my simulation suggests.

**TLDR version**: Your spreadsheet calculates damage reduction incorrectly for dodge rating, artificially decreasing its value (and thus making expertise look better than it should in comparison).

## Bookmarks