Usually, these options break even when your enemies need to roll a natural 11 or better to hit you
Ultimately, which action is better comes down to how easy it is for your enemies to hit you and exactly how much damage they do. When considering statistical questions like this I like to use Anydice to figure them out.
For the case of attacks, I created this anydice script:
function: attack ROLL:n TARGET:n DAM:d CRIT:d {
if ROLL = 1 { result: 0 }
if ROLL >= 20 { result: DAM + CRIT }
if ROLL >= TARGET { result: DAM }
result: 0
}
DAM: 1d10+3
CRIT: 1d10
loop AC over {1..20} {
output [attack 1d20 AC DAM CRIT] named "Attack against AC [AC]"
output [attack 1d20 AC DAM CRIT]/2 named "Attack against AC [AC] with resistance"
output [attack 2@2d20 AC DAM CRIT] named "Attack against AC [AC] with disadvantage"
}
The function attack
calculates the expected damage when making an attack (simply feed in a d20 roll for to hit, the d20 roll needed to hit, and the damage done plus additional damage on a crit). In this example I used a fairly typical longsword attack to set the damage (1d10+3, with an extra d10 on a crit). Resistance is applied by halving the resulting damage, and disadvantage is applied by using the roll 2@2d20
(an expression which selects the second highest die from a 2d20 roll).
You can eyeball the results in Anydice (I suggest using the "Table" and "Summary" view modes to make the most visual sense of it), but I went ahead and exported the results to do a bit more analysis. Below is a table showing the relative benefits of resistance and disadvantage against a 1d10+3 longsword attack.
Min. to-hit |
Av. Damage |
Resistance |
Res. Reduction |
Disadvantage |
Disadv. Reduction |
1 |
8.35 |
3.9375 |
52.84% |
7.685 |
7.96% |
2 |
8.35 |
3.9375 |
52.84% |
7.685 |
7.96% |
3 |
7.925 |
3.7375 |
52.84% |
6.89875 |
12.95% |
4 |
7.5 |
3.5375 |
52.83% |
6.155 |
17.93% |
5 |
7.075 |
3.3375 |
52.83% |
5.45375 |
22.92% |
6 |
6.65 |
3.1375 |
52.82% |
4.795 |
27.89% |
7 |
6.225 |
2.9375 |
52.81% |
4.17875 |
32.87% |
8 |
5.8 |
2.7375 |
52.80% |
3.605 |
37.84% |
9 |
5.375 |
2.5375 |
52.79% |
3.07375 |
42.81% |
10 |
4.95 |
2.3375 |
52.78% |
2.585 |
47.78% |
11 |
4.525 |
2.1375 |
52.76% |
2.13875 |
52.73% |
12 |
4.1 |
1.9375 |
52.74% |
1.735 |
57.68% |
13 |
3.675 |
1.7375 |
52.72% |
1.37375 |
62.62% |
14 |
3.25 |
1.5375 |
52.69% |
1.055 |
67.54% |
15 |
2.825 |
1.3375 |
52.65% |
0.77875 |
72.43% |
16 |
2.4 |
1.1375 |
52.60% |
0.545 |
77.29% |
17 |
1.975 |
0.9375 |
52.53% |
0.35375 |
82.09% |
18 |
1.55 |
0.7375 |
52.42% |
0.205 |
86.77% |
19 |
1.125 |
0.5375 |
52.22% |
0.09875 |
91.22% |
20 |
0.7 |
0.3375 |
51.79% |
0.035 |
95.00% |
The results show that the break-even point between resistance to damage and disadvantage on the incoming attack is when the enemy needs to roll ~11 or better hit you. It also shows that though the value of resistance varies very little, the value of disadvantage swings dramatically from very low to very high as the attacker's hit chance decreases.
This makes sense mathematically; if the enemy has a 50% chance to hit, then disadvantage on the attack roll reduces that to 25%, so exactly halves the number of attacks that hit. Above a 50% hit chance, disadvantage becomes proportionally less effective, so the flat 50% of resistance is better; below a 50% hit chance, disadvantage becomes more effective, and so the increasingly reduced chance of being hit overtakes the flat reduction of resistance.
However, the values in the table don't quite perfectly correspond to what we'd naively expect. Because you round down the fraction when halving damage, resistance actually grants slightly better than 50% damage reduction when the original damage is odd; however, disadvantage not only reduces the chance of a hit but even more significantly reduces the chance of a crit, and so also reduces the expected damage by a slightly greater proportion than it reduces hit chance. The exact determination of which is better depends on how much damage the enemy does normally and how much extra damage they do on a crit. In this case, using a typical 1d10+3 damage attack, resistance is ever so slightly better when requiring an 11, but disadvantage is clearly superior on a required 12+.
Resistance becomes a stronger option as the individual attack damage decreases, because when the damage values are already very low, rounding down those fractions is proportionally stronger. In the most extreme case of an attack that only ever does 1 damage or 2 on a crit, such as a rat's bite, then resistance is better all the way up until you're hit on a 17+. Conversely, when the attack damage is very high on average, the effect of rounding fractions is proportionally less; if you're being bitten by a Tarrasque for 4d12+10 damage, then resistance is a better option only up to a required 10, and disadvantage gains the edge on a required 11+.
If an attack has unusually vicious critical damage, the effect of reduced critical hit chance becomes stronger. Taking the 1d10+3 example, if the critical hit instead does an extra 2d10 damage (for instance, as a result of a Half-Orc's Savage Attacks feature), then disadvantage is better on a required 11. If that crit did an extra 4d10 damage (e.g. as delivered by a high-level barbarian half-orc) then disadvantage would be better on a required 10+.
Taken altogether, the general rule of thumb we can derive here is that if the enemy needs to roll an 11 to hit you, resistance and disadvantage will be nearly equivalent; below that, resistance is superior, and above that, disadvantage wins out, except in quite extreme edge cases. For the attacks of most monsters an adventurer is likely to encounter, this rule holds. You could experiment with changing the values in the script I used if you want to figure out the exact break point in different circumstances.
Are they worth it?
In practical terms, the value of either action is somewhat dubious in most situations.
When you're already hard to hit, Dodge is relatively better than blade ward, but the absolute value of Dodging is ultimately quite trivial. If an enemy hits you on a 16+ with a 1d10+3 attack, Dodging saves you just under 2hp per attack. Even for a much deadlier attack, such as the Tarrasque's 4d12+10 bite, at the same hit chance, Dodging saves you only ~8hp per attack.
When you're getting hit half the time, the two actions are roughly equivalent to each other. 1d10+3 on an 11+ loses ~2.4hp to either. If the Tarrasque's 4d12+10 hits on 11+, blade ward saves ~9.1hp, and Dodging saves ~10.2hp.
When you're easy to hit, blade ward is better than Dodge, and the absolute value of the action is greater than when you're harder to hit - but still relatively low. A 1d10+3 attack that hits on a 6+ loses ~3.5hp per attack to a blade ward. A 4d12+10 attack that hits on a 6+ loses ~14.33hp.
Contrast this to using your action to, for instance, cast a 1st level magic missile. That spell will do 10.5hp damage on average, and is likely at the low end of the expected damage output available to your character by the use of their action. That's more damage dealt than is saved in almost all of the examples above, even when accounting for being attacked multiple times!
Unless you expect to be attacked multiple times by enemies that do a lot of damage and will hit you easily, your action would very likely be better spent doing something else. If you are in that circumstance, though, blade ward is a much better option for mitigating your incoming damage than the Dodge action.
As a general rule, as well, you're almost always better off to take damage in a few smaller chunks than in one big chunk. For example, if you're trying to maintain concentration on a clutch spell, you're better off taking two hits that do 25 damage each and making two achievable DC12 concentration saves than one hit that does 50 damage and requires a quite unlikely DC25 save. So, for practical purposes, I judge that blade ward is better than Dodge, damning with faint praise though that may be.
Bonus saving throws tangent: when you can save for none on a natural 10 or less
Blade Ward isn't actually useful against saving throw effects since it only applies to weapon attacks, but the original version of the question did ask and so I figured it out. For the sake of argument, if you were in a situation where you could choose between getting advantage on a saving throw or resistance to the resulting damage, the math basically works out inversely to that of attacks. I used this anydice script in order to calculate the consequences for saving throws:
function: save ROLL:n TARGET:n FULLDAM:n HALF:n {
if ROLL >= TARGET {
if HALF { result: FULLDAM/2 }
result: 0
}
result: FULLDAM
}
DAM: 3d6
loop DC over {1..20} {
output [save 1d20 DC DAM 1]/2 named "Save for half against [DC] with resistance"
output [save 1@2d20 DC DAM 1] named "Save for half against [DC] with advantage"
}
loop DC over {1..20} {
output [save 1d20 DC DAM 0]/2 named "Save for none against [DC] with resistance"
output [save 1@2d20 DC DAM 0] named "Save for none against [DC] with advantage"
}
The results depend on whether or not you save for half damage or no damage, so I split those two out into different sections. The save
function takes a d20 roll, a target number, a damage expression and a flag for whether or not it saves for half; then it calculates the expected damage given those values. As above, I recommend table and summary view.
These results show us that when you can save for no damage, advantage on the save is better than resistance if your required number is 10 or less; if you need to roll an 11 or better to save, resistance is superior. Basically, this is the inverse of the result for attacking - on a required 11, advantage will make the save exactly twice as often as a regular roll, but resistance works out slightly better because it rounds down that fractional damage, and this time there are no critical hits to skew it back the other way.
However, if you can only save for half damage, resistance is always better than advantage on the saving throw; there is no required roll where advantage on the save won't reduce your expected damage more than giving yourself resistance will. The chance to halve your incoming damage twice - both with a save and with resistance - simply skews the results strongly in favour of resistance.