When comparing savage attacker to +2 str you need to factor in to-hit. You do 0 on a miss.
I see this argument a lot, but I get the feeling most people haven't actually run the numbers. Let's see what we get.
If we assume 20 attacks (roll a d20), then we can get the average damage over those 20 attacks by multiplying the hit chance by the average damage per attack. Average damage is pretty easy, just see my previous table. Hit chance is a rolling target, though.
In this case, let's assume this is a 4th level character looking at their first ASI. That would give them a proficiency bonus of +2. Let's also assume that they have 16 in their relative attack stat, giving them a +3 bonus. If they are attacking with a weapon they have proficiency with (which they should be), then they have
+5 to hit.
Now for the AC of the monster they will be attacking. Let's assume a low end AC of 7. With a +5 to hit, anything lower will still have the same result (a natural 1 always misses). Same idea for the top end AC, giving us 26 (again a natural 20 always hits).
Two quick examples to illustrate the edge cases:
6AC; Rolls 1 +5 = 6; Rolling a 1 auto-misses
27AC; Rolls 20 +5 +1(ASI Str) = 26; Rolling 20 auto-hits
It's also worth nothing that even a Tarrasque only has 25AC, so 26AC and higher is not likely to be seen.
Now to the math:
Assuming a 10AC and +5 base to hit, Savage Attacker will hit 15/20 attacks; with an average damage of 11.4861 per attack (1d12+3) and 18.7861 per crit (2d12+3), attacking a target with 10AC has an average result of 9.5539 damage.
Assuming a 10AC and +5 base to hit, +2 Str will hit 16/20 attacks (+1 bonus to hit); with an average damage of 10.5 per attack (1d12+4) and 17 per crit (2d12+4), attacking a target with 10AC has an average result of 9.25 damage.
This means that +2 STR does 96.82% of the damage Savage Attacker does when the target has 10AC. See the below table for the numbers at each range.
AC | Base To Hit | +2 Str | Svg Atk | Str/Svg |
7 | 5 | 10.3
| 11.2768
| 91.34%
|
8 | 5 | 10.3
| 10.7025
| 96.24%
|
9 | 5 | 9.775
| 10.1282
| 96.51%
|
10 | 5 | 9.25
| 9.5539
| 96.82%
|
11 | 5 | 8.725
| 8.9796
| 97.16%
|
12 | 5 | 8.2
| 8.0403
| 97.56%
|
13 | 5 | 7.675
| 7.8310
| 98.01%
|
14 | 5 | 7.15
| 7.2567
| 98.53%
|
15 | 5 | 6.625
| 6.6824
| 99.14%
|
16 | 5 | 6.1
| 6.1081
| 99.87%
|
17 | 5 | 5.575
| 5.5337
| 100.75%
|
18 | 5 | 5.05
| 4.9594
| 101.83%
|
19 | 5 | 4.525
| 4.3851
| 103.19%
|
20 | 5 | 4
| 3.8108
| 104.96%
|
21 | 5 | 3.475
| 3.2365
| 107.37%
|
22 | 5 | 2.95
| 2.6622
| 110.81%
|
23 | 5 | 2.425
| 2.0879
| 116.14%
|
24 | 5 | 1.9
| 1.5136
| 125.53%
|
25 | 5 | 1.375
| 0.9393
| 146.39%
|
26 | 5 | 0.85
| 0.9393
| 90.49%
|
+2 Str doesn't actually catch up in damage until the target has 17AC. For each +1 to hit beyond 5, take one step up the ladder (i.e +6 base to hit on 10AC would equate to the same as 9AC on the table). Interestingly enough, the reverse is (roughly) true for +1 to damage when calculating which gives a bigger increase. This means that every Proficiency increase will move the break point down one notch, so at lvl 17, Savage attacker would give you more damage when attacking anything with 20AC or less than +2 Str would. Of course, that also assumes that you still have the option to take +2 Str by then.
Now, admittedly I am using 1d12 to make this comparison, but that's because 1d12 is where Savage Attacker has the most impact. If you're planning on using a 2d6 weapon, then Savage Attacker probably isn't the way to go. In the above example, the break even point falls all the way down to 7AC. You run into a similar issue with Great Weapon Fighting Style.
<edited to account for critical damage>