Just roll a d1000 in anydice.
The probabilities for rolling 3d10 as the 3 tens places will be exactly the same as rolling a d1000.
These answers shows the math for d100 vs 2d10, it's exactly the same story here just times ten.
The point of using d1000 is that probabilities are easy to calculate: the chance of the number or less is equal to the number in per-mille. The chance of rolling less than 900 is 900-1 in 1000 or 899‰ (89.9%); the chance of rolling equal or higher is the remainder in 1000 or 101‰ (10.1%) SevenSidedDie
PCs are exceptional regardless of their ability scores
Answering your actual question rather than the math one first: Your hang-up is that you place too much emphasis on ability scores. A fighter is already exceptional just for being a fighter, just as a wizard, cleric or druid are already exceptional for belonging to these classes. Ability scores influence things the characters can do, but that's at best describing the relative strengths of PCs against each other - and even then it's a very inexact and misleading measure, my dwarf barbarian with 28 strength is not really more exceptional than sorcerer with their highest stat being a 17 in charisma, but with the ability to destroy castles at a whim via Earthquake.
Thus, I don't believe your problem can be solved via math, certainly not by slightly tweaking the ability scores players get; It's more a matter of framing PCs as larger than life heroes, which is very much within your purview as a DM.
The literal math question
Here are the exact (to six significant digits) probabilities of both getting the individual scores and getting a score that is at least as great as a particular score (using the 4d6 drop lowest system). But like I said earlier, I'm not sure that knowing this will improve matters much for you (note that an "average" human is assumed to have values at around 10 (see also the Commoner Statblock):
Individual Score Probabilities
\$
\begin{array}{c|c|c}
\text{Ability Score} & \text{Probability} & {\text{Probability of being}\\\text{at least as great as}}\\\hline
18 & 1.620370\% & 1.620370\%\\
17 & 4.166667\% & 5.787037\%\\
16 & 7.253086\% & 13.040123\%\\
15 & 10.108025\% & 23.148148\%\\
14 & 12.345679\% & 35.493827\%\\
13 & 13.271605\% & 48.765432\%\\
12 & 12.885802\% & 61.651235\%\\
11 & 11.419753\% & 73.070988\%\\
10 & 9.413580\% & 82.484568\%\\
9 & 7.021605\% & 89.506173\%\\
8 & 4.783951\% & 94.290123\%\\
7 & 2.932099\% & 97.222222\%\\
6 & 1.620370\% & 98.842593\%\\
5 & 0.771605\% & 99.614198\%\\
4 & 0.308642\% & 99.922840\%\\
3 & 0.077160\% & 100.000000\%\\
\end{array}
\$
Expected single ability score value: 12.24
Expected total: 73.47 (as you suspected in the question)
And here are the probabilities for score totals (up to 6 significant digits). Note that there are a bunch of zeros and 100%s in here, these are mostly because the chances are just so astronomically small or big that 6 significant digits aren't enough (except for the accumulated probabilities for minimum values, since of course nothing can be smaller than the minimum).
Total score probabilites
\$
\begin{array}{c|c|c}
\text{Total Score} & \text{Probability} & {\text{Probability of being}\\\text{at least as great as}}\\\hline
108 & 0.000000\% & 0.000000\%\\
107 & 0.000000\% & 0.000000\%\\
106 & 0.000000\% & 0.000000\%\\
105 & 0.000001\% & 0.000002\%\\
104 & 0.000006\% & 0.000007\%\\
103 & 0.000022\% & 0.000030\%\\
102 & 0.000073\% & 0.000102\%\\
101 & 0.000212\% & 0.000314\%\\
100 & 0.000559\% & 0.000873\%\\
99 & 0.001355\% & 0.002228\%\\
98 & 0.003053\% & 0.005280\%\\
97 & 0.006438\% & 0.011719\%\\
96 & 0.012800\% & 0.024518\%\\
95 & 0.024120\% & 0.048638\%\\
94 & 0.043277\% & 0.091916\%\\
93 & 0.074221\% & 0.166137\%\\
92 & 0.122070\% & 0.288207\%\\
91 & 0.193078\% & 0.481284\%\\
90 & 0.294415\% & 0.775699\%\\
89 & 0.433730\% & 1.209429\%\\
88 & 0.618481\% & 1.827910\%\\
87 & 0.855065\% & 2.682974\%\\
86 & 1.147820\% & 3.830794\%\\
85 & 1.498018\% & 5.328812\%\\
84 & 1.902979\% & 7.231791\%\\
83 & 2.355468\% & 9.587259\%\\
82 & 2.843496\% & 12.430755\%\\
81 & 3.350615\% & 15.781370\%\\
80 & 3.856750\% & 19.638120\%\\
79 & 4.339492\% & 23.977612\%\\
78 & 4.775768\% & 28.753380\%\\
77 & 5.143685\% & 33.897065\%\\
76 & 5.424356\% & 39.321421\%\\
75 & 5.603493\% & 44.924914\%\\
74 & 5.672574\% & 50.597488\%\\
73 & 5.629472\% & 56.226960\%\\
72 & 5.478471\% & 61.705431\%\\
71 & 5.229710\% & 66.935141\%\\
70 & 4.898120\% & 71.833262\%\\
69 & 4.502022\% & 76.335284\%\\
68 & 4.061548\% & 80.396832\%\\
67 & 3.597061\% & 83.993893\%\\
66 & 3.127736\% & 87.121629\%\\
65 & 2.670427\% & 89.792056\%\\
64 & 2.238874\% & 92.030931\%\\
63 & 1.843300\% & 93.874230\%\\
62 & 1.490344\% & 95.364575\%\\
61 & 1.183308\% & 96.547883\%\\
60 & 0.922602\% & 97.470485\%\\
59 & 0.706332\% & 98.176817\%\\
58 & 0.530938\% & 98.707756\%\\
57 & 0.391803\% & 99.099559\%\\
56 & 0.283804\% & 99.383363\%\\
55 & 0.201753\% & 99.585116\%\\
54 & 0.140730\% & 99.725846\%\\
53 & 0.096296\% & 99.822142\%\\
52 & 0.064621\% & 99.886763\%\\
51 & 0.042516\% & 99.929279\%\\
50 & 0.027414\% & 99.956693\%\\
49 & 0.017318\% & 99.974011\%\\
48 & 0.010713\% & 99.984724\%\\
47 & 0.006487\% & 99.991211\%\\
46 & 0.003842\% & 99.995053\%\\
45 & 0.002225\% & 99.997279\%\\
44 & 0.001259\% & 99.998538\%\\
43 & 0.000696\% & 99.999233\%\\
42 & 0.000375\% & 99.999608\%\\
41 & 0.000197\% & 99.999805\%\\
40 & 0.000101\% & 99.999905\%\\
39 & 0.000050\% & 99.999956\%\\
38 & 0.000024\% & 99.999980\%\\
37 & 0.000011\% & 99.999991\%\\
36 & 0.000005\% & 99.999996\%\\
35 & 0.000002\% & 99.999998\%\\
34 & 0.000001\% & 99.999999\%\\
33 & 0.000000\% & 100.000000\%\\
32 & 0.000000\% & 100.000000\%\\
31 & 0.000000\% & 100.000000\%\\
30 & 0.000000\% & 100.000000\%\\
29 & 0.000000\% & 100.000000\%\\
28 & 0.000000\% & 100.000000\%\\
27 & 0.000000\% & 100.000000\%\\
26 & 0.000000\% & 100.000000\%\\
25 & 0.000000\% & 100.000000\%\\
24 & 0.000000\% & 100.000000\%\\
23 & 0.000000\% & 100.000000\%\\
22 & 0.000000\% & 100.000000\%\\
21 & 0.000000\% & 100.000000\%\\
20 & 0.000000\% & 100.000000\%\\
19 & 0.000000\% & 100.000000\%\\
18 & 0.000000\% & 100.000000\%\\
\end{array}
\$
Source code for generating the table (Haskell)
{-# LANGUAGE Strict, TypeApplications #-}
import qualified Data.Map as M
import Text.Printf
import Data.List(sortBy)
import Data.Ord(comparing)
import Control.Applicative((<|>))
import Data.Ratio
rolls :: [Int]
rolls = do
a <- dice
b <- dice
c <- dice
d <- dice
return . sum . take 3 . sortBy (comparing negate) $ [a,b,c,d] where
dice = [1..6]
frequencies :: M.Map Int Int
frequencies = foldr (\v m -> M.alter (\f -> fmap (+1) f <|> Just 1) v m) M.empty rolls
probabilities :: M.Map Int Rational
probabilities = fmap ((/ 6^4) . fromIntegral) frequencies
printProb :: Int -> Rational -> Rational -> IO ()
printProb k p acc = printf "%d & %.6f\\%% & %.6f\\%%\\\\\n" k (percent p) (percent acc) where
percent = fromRational @Double . (100*)
totalScoreInstances :: [(Int, Rational)]
totalScoreInstances = do
(strength, pStr) <- oneScore
(constitution, pCon) <- oneScore
(dexterity, pDex) <- oneScore
(wisdom, pWis) <- oneScore
(intelligence, pInt) <- oneScore
(charisma, pCha) <- oneScore
let totalScore
= strength
+ constitution
+ dexterity
+ wisdom
+ intelligence
+ charisma
let totalProb
= pStr
* pCon
* pDex
* pWis
* pInt
* pCha
return (totalScore, totalProb)
where oneScore = M.toList probabilities
totalScoreProbabilities :: M.Map Int Rational
totalScoreProbabilities = foldl
(\m (s, p) -> M.alter (\tp -> fmap (+ p) tp <|> Just p) s m)
M.empty
totalScoreInstances
main = do
putStrLn "## Individual Score Probabilities"
putStrLn "\\$"
putStrLn "\\begin{array}{c|c|c}"
putStrLn "\\text{Ability Score} & \\text{Probability} & \\text{Probability of being at least as great as}\\\\\\hline"
fst $ M.foldrWithKey (\k v (m,acc) -> let acc' = acc+v in (m >> printProb k v acc', acc')) (return (), 0) probabilities
putStrLn "\\end{array}"
putStrLn "\\$"
let expected = M.foldlWithKey (\t k v -> t + (fromIntegral k * v)) 0.0 probabilities
printf "Expected single ability score value: %.2f\n" $ fromRational @Double expected
printf "\nExpected total: %.2f\n" $ fromRational @Double expected * 6
putStrLn "## Total score probabilites"
putStrLn "\\$"
putStrLn "\\begin{array}{c|c|c}"
putStrLn "\\text{Total Score} & \\text{Probability} & \\text{Probability of being at least as great as}\\\\\\hline"
fst $ M.foldrWithKey (\k v (m,acc) -> let acc' = acc+v in (m >> printProb k v acc', acc')) (return (), 0) totalScoreProbabilities
putStrLn "\\end{array}"
putStrLn "\\$"
Note: if you want to run this yourself, compile with ghc -O2
and don't try to run it via the interpreter if you want to see the result before the heat death of the universe.
Best Answer
The mean result of 2d10 is 11. A reasonable approximation for number of levels between increments is therefore 9 (because 99 is closest, and you cannot have fractional levels).
The probability of having an increment by level 9 is slightly less than 50%. The probability of having the increment by level 10 is somewhat greater than 50%.
My calculations and tests show 9.6 levels mean before a stat increment under this system. I will spare the details - some discussion in meta about how complex Q&A here should be for probabilities before you are better off asking at https://math.stackexchange.com/