This question is not actually related to RPGs but is more of a real-world dice rolling scenario I'm looking for help with, from dice rolling experts.

I'm currently memorizing the Book of Psalms, which is divided into 150 chapters.

I'm looking for an analog, elegant way of quizzing myself, by rolling some number of dice (or whatever means, really, just nothing digital) to get a random (equally likely) number from 1 to 150.

Not being very aware of the dice world I start googling, starting with "150 sided dice" ... which would obviously do the trick in one go.

Didn't take long for me to realize there are only so many 3D shapes that lend themselves to being dice with 120 sided dice being the largest (and pretty ridiculous looking) I could find.

So it'll be some combination of things. One solution I have thought of so far would be a d30 and a d5. I would subtract one from the d5 and multiply that number by 30, resulting in 0,30,60,90,120. I would then simply add the value of the d30.

Hopefully that example gives you an idea of what I'm trying to accomplish. Apologies in advance if I'm barking up the wrong tree and this question doesn't belong. If so I'll just edit my question "A Character in my RPG is memorizing the Book of Psalms..." :)

  • 27
    \$\begingroup\$ I'm voting to close this question as off-topic because this question is about statistical modeling with dice. It may be a better fit for Math.SE which has a wide range of dice questions, but you may want to check their question guidelines to be sure. Feel free to take our tour for more about what types of questions this site answers. Thanks for visiting! \$\endgroup\$ – David Coffron Apr 30 '19 at 20:13
  • 15
    \$\begingroup\$ I think there’s meaningful utility here for future RPG-focused readers. They might have a different reason to want to roll a number 1–150, but it would be the same practical question. \$\endgroup\$ – SevenSidedDie Apr 30 '19 at 20:45
  • 5
    \$\begingroup\$ @mxyzplk I see your point, though it seems odd since our SE logo is one of the funny shaped dice that our hobby is famous for. Expertise in using dice in non standard ways is an RPG area of expertise, isn't it? \$\endgroup\$ – KorvinStarmast May 1 '19 at 18:47
  • 5
    \$\begingroup\$ We’ve gone over this on meta many times. Question about dice, layout, writing, etc, etc - it’s on topic if it’s about an RPG and off topic if it’s not. There’s dragons and lasers in our header too, and questions about those in an RPG context are welcome and if not in an RPG context are for another venue. \$\endgroup\$ – mxyzplk - SE stop being evil May 1 '19 at 19:29
  • 5
    \$\begingroup\$ @KorvinStarmast This is one of those cases (it seems to me) where "we have expertise in this" runs up against "real questions have real answers." If someone's running an RPG and they want a good way to generate 1-150 at the table we'll answer that question. Because the answers to clarifying questions like "how much math are your players comfortable with?" and "can the die be different colors?" and "how quick does this need to be?" and "does this happen once a session or every couple of minutes?" all of which could impact answers and votes, have answers in the real case and don't here. \$\endgroup\$ – nitsua60 May 2 '19 at 1:28

13 Answers 13


Use a "d50" and a "d3" - which are 2d10 and 1d6

You roll 2d10 to make up your percentile dice of 1-100.
Divide the result by two (round up) to make it 1-50. (If the dice are marked 0-9, then 00 = 100).

You roll the 1d6 to determine the offset: {1, 2} = 0, {3, 4} = +50, {5, 6} = +100.

Result is 1-50, 51-100, 101-150.

Per your comment, you need to buy dice. Buy two ten-sided dice, and use a single 6-sided die.

  • I suggest each of the ten sided dice be a different color: say red and green. Red for tens, green for ones. Rolling a red 3 and a green 7 yields 37. Divide by two (round up) for a 19. (or 69 or 119).
  • If the game shop (or other vendor) sells ten-sided dice that are labelled 10, 20, 30 ... as well as 1, 2, 3,... then the color coding is not needed. Thank you @MrZarq

Good luck.


The most straightforward method is to roll two dice: a die for the “ones” place and another to generate 0–15 for the “tens” place. This is quick to roll, easy to read, portable, and requires no mental calculations. You can do this with a pair of available dice: a 15-sided die and a ten-sided die (the latter usually numbered 0–9).

Mark the “15” on the d15 as zero: with a marker you can draw a zero over it, or black out white numerals, to remind you that this face means a zero in the “tens” place. (Or, if it’s easier, just always remember to read “15” as zero.)

Then roll and read them in order:

  • d15 shows 7 and the d10 shows 1 gives you 71.
  • d15 shows 4 and the d10 shows 0 gives you 40.
  • d15 shows 0 (the blacked-out face) and the d10 shows 1 gives you 1.
  • d15 shows 14 and the d10 shows 9 gives you 149.

This pattern holds except for a result of zero on both dice: read this as 150, which otherwise won’t show up literally if you’ve marked the d15. (This is akin to how a pair of d10s marked 0–9 are traditionally read to roll 1–100: they’re read literally for 00–99, but when two zeroes come up that’s read as 100, completing the range.)

  • 1
    \$\begingroup\$ Today I learned there are d15s. Not that it matters for this question, but, does anyone know if any of those non-standard dice are statistically verified, even by design? \$\endgroup\$ – Novak May 1 '19 at 2:27
  • 2
    \$\begingroup\$ @Novak The site has fielded questions about the fairness of at least one of those nonstandard dice here, which is appropriate given this answer's author. :-) Assessing the d15 specifically, though. should be it's own question. \$\endgroup\$ – Hey I Can Chan May 1 '19 at 2:45
  • \$\begingroup\$ @GregJenkins just so you know, that die is not going to be truly fair - see here: rpg.stackexchange.com/questions/147221/… \$\endgroup\$ – Stackstuck May 4 '19 at 1:18

Roll a D20 and D10, Reroll Results Over 150

The simplest solution for when you have no die of the right size is to use a higher die that does exist and drop results that are too high.

It is not the most elegant solution, but one way to generate very easy to interpret results for 1-150 without requiring particularly uncommon dice is to get a d20 and a d10. As very common rpg dice they should both be easy to find at most game shops (there's usually little bins of single dice of the various sizes). In my area they cost on the lower side of around a dollar each.

Roll d20 to determine the first two digits (hundreds and tens) and the d10 for the last digit. Count 20's as 0 (this is so that you can generate numbers below 10). This will generate results from 0-199. reroll results for which no psalm exists (which usually just means rerolling the d20, the d10 only if you end up with "psalm zero").

Once again not the most elegant solution, but it requires very little effort to interpret results, a $1.50-$3 or less investment, a trip to basically anyplace fine rpg materials are sold, and rerolling one die a quarter of the time.

Some d10s are marked 0-9 and others 00-90. Life will be easier if you buy the prior.

Of course, if you are more mathematically inclined, there are numerous other answers that are much more clever here and involve no rerolls.

  • 2
    \$\begingroup\$ Upvoted because it's a lot easier (so faster and more convenient) to reroll if the value is too high than to divide by two, round up etc. And a D15 is a dice seldom seen. \$\endgroup\$ – Jylo May 2 '19 at 8:24

Don't worry about those silly plastic things and use the internet*

You can use websites such as anydice.com in order to roll virtual dice, this will give you the same effect and then you won't have to worry about real dice.

Here is an example of how I setup anydice to allow you to roll 1d150s and generate a result

enter image description here

You mentioned breifly in your question about "real-world scenario" and I'm not sure if this meant you physical dice or not. Anydice (or similar websites) can be accessed from mobiles, desktop PCs and the likes.

*Title posted for comedic effect, I love real dice.

  • 4
    \$\begingroup\$ A purely JavaScript-based dice roller would probably be better, since you don't have to stay online to use it as long as you have the page open. Here's a random one I just Googled up. Or just download any of the countless free dice roller apps for your phone (like this one, which seems to be both gratis and ad-free). \$\endgroup\$ – Ilmari Karonen May 1 '19 at 12:09
  • 2
    \$\begingroup\$ @IlmariKaronen There are a ridiculous amount of dice rolling applications, OP can feel free to pick one that fits their tastes \$\endgroup\$ – GPPK May 1 '19 at 12:14
  • 5
    \$\begingroup\$ Thanks! I was aware of these kind of tools online. I'm a web developer and have any number of ways of coming up with a random number (okay, psuedo-random). The physical nature of the problem is key for me, simply because while I spend most of my workday in front of a screen, I try to live more on the unplugged side during the rest of my day. I appreciate your reply, though! \$\endgroup\$ – Greg Jenkins May 1 '19 at 18:27

Roll from 1 to 600, then wrap around.

(...or from 0 to 599, or from 100 to 699, or from 101 to 700, or whatever. It makes no difference.)

Probably the simplest way to do this is to roll a d6 for the first digit and a d100 (typically represented in RPG dice sets as a pair of d10s, one numbered 0–9 and the other in steps of 10 from 00 to 90) for the last two digits (counting a double zero on the d100 as 00, not as 100). Done straight, this gives you a number from 100 to 699, which is fine.

(You could also interpret 6 on the d6 as a zero, giving you a number from 0 to 599, which is also fine. Or you could additionally interpret a roll of 6,0,0 as 600 instead of 0, giving you a result from 1 to 600, which is also fine. Or you could count a double zero on the d100 as 100 and add it to the d6 × 100, giving you a result either from 101 to 700 or from 1 to 600, depending on whether you count 6 on the d6 as 0 or 600. Any of these methods is also fine, as long as you decide ahead of time what you're going to do and do it consistently. If you happen to have a d100 pair where the ones die is numbered 1–10 and prefer to just sum the tens and ones, that's just fine too.)

Then reduce the result modulo 150. The naive way to do that would be to repeatedly subtract 150 from the result until it's 150 or less, but it's easier to make use of the fact that 2 × 150 = 300. So you only need to reduce the first digit by three until the result is at most 300, then subtract 150 once if the result is still more than 150.

(If the method of rolling you used happened to give you a zero, add 150 to it. Because we're not programmers, and prefer to count from 1 to 150 rather than from 0 to 149.)

Ps. Mathematically, the reason why we have so much latitude in choosing how to roll the initial number is because any method that picks a uniformly distributed random number from a contiguous range whose length is a multiple of \$n\$, and then wraps that result around into a range of length \$n\$, will give a uniform result modulo \$n\$. So as long as there are 600 different possible dice rolls (which using a d6 and two d10s ensures), as long as each distinct roll yields a different number, and as long as the difference between the highest and the lowest possible number equals 600 − 1 = 599, then reducing the number thus rolled modulo 150 will give you a uniformly distributed random number from 1 to 150.

(Or from 0 to 149, if you're a programmer.)

  • 1
    \$\begingroup\$ I have to say, the significant chunks of text that's both subscripted and superscripted make this answer pretty hard to read. \$\endgroup\$ – V2Blast May 1 '19 at 19:23
  • \$\begingroup\$ @V2Blast: Fair enough. I've reduced it to just superscripting, is it any better now? I do wish there was some non-hacky way to do small text in SE Markdown. :/ \$\endgroup\$ – Ilmari Karonen May 1 '19 at 19:25
  • \$\begingroup\$ Yes, it is a little easier to read now. Thanks. \$\endgroup\$ – V2Blast May 1 '19 at 19:26

If you do not have RPG equipment and a utility belt full of weirdly shaped dice already, you can solve the problem with a standard six-sided die:

  • Roll a number x from 1 to 5. To do so roll your die, but if you happen to roll a six, repeat until you don't.
  • Roll another number y from 1 to 5.
  • Roll a number z from 1 to 6

Note that this gives you \$5\times5\times6=150\$ different outcomes. To turn the outcomes to a number in the range 1-150, compute

$$ (x-1)\times30 + (y-1)\times6 + z $$

  • 1
    \$\begingroup\$ Welcome to RPG.SE! Take the tour if you haven't already, and check out the help center for more guidance. Good Luck and Happy Gaming! \$\endgroup\$ – Someone_Evil May 1 '19 at 8:38
  • \$\begingroup\$ Alternatively, \$x + 5 \times (y-1) + 25 \times (z-1)\$ would also work, and some might find the arithmetic easier this way around. \$\endgroup\$ – Ilmari Karonen May 1 '19 at 11:59

Similar to SevenSidedDie's answer to generate a number for the tens and the units. If you wanted to solve this without electricity or specialist dice, you could use a deck of cards.

To decide between 00-10-20-30-40...140, use the Ace to King of Spaces to represent 10-130 and Ace of Clubs to represent 00 and 4 of Clubs to represent 140.

To decide between 1-2-3-4...9 Use 1 to 10 of Hearts.


7 of Spades and 4 of Hearts is 74.
4 of Clubs and 9 of Hearts is 149.
Ace of Clubs and 10 of Hearts is 150.

Shuffle and draw a card from each pile to get a number between 1 and 150.

  • \$\begingroup\$ Bonus points for using a Tarokka deck. \$\endgroup\$ – StuperUser May 1 '19 at 14:55

A d30 marked 1-15 twice, and a d10 marked 0-9

I like SevenSidedDie's answer of a specialist d15 and a d10. It appears that specialist dice are available for every odd and even value from d2 to d20, and custom 3d-printed designs up to d30 and beyond.

However, a slightly cheaper alternative may be to mark a d30 with 1-15 twice, using stickers or the like. The advantage is that d30s are cheaper, more readily available, and you're more likely to already own one, it being perhaps the most common of non-standard dice. The disadvantage is your stickers can get dirty or peel off over time; they lack the durability inherent to dice.

You would, naturally, read this like percentile dice with the d10 as the second digit, giving a literal range of 10 to 159, with presumably numbers 151-159 read as 1-9. Since you know there are no actual Psalms numbered above 150 (ignoring apocryphal texts of course), this method ensures that you are unlikely to misinterpret rolls of 151-159, thus maintaining an even distribution.

It's possible for someone to 3d print an actual 150-sided die, but in my experience, the more sides you add past 1d20, the closer you approach a sphere. You need a very long table for it to stop rolling and it's hard to read the top precisely. Even a 60-sided die is impractical.


Divide into factors, and then roll the factors randomly.

You're looking to roll with uniform distribution from the range 1-150. In a uniform distribution with 150 unique values, each value has a 1/150 chance of being selected each time.

For large numbers, most tabletop game hobbyists don't have dice with that many sides. Instead, the large number is divided into factors of common dice sizes. Most polyhedral dice come with 4, 6, 8, 10, 12, or 20 sides, so it helps to divide into those numbers. And if you can't divide evenly by one of those numbers, you can instead divide by one of their factors, and then applying modular arithmetic.

150 can be factored into 6 x 5 x 5. Imagine you have six partitions of size 25 each, starting at zero (0-24, 25-49, 50-74, 75-99, 100-124, 125-149). Then split each 25-sized partition into five partitions of size 5 each (0-4, 5-9, 10-14, 15-19, 20-24). You can simulate a d5 by using a d10 modulo 5.

Roll a d6 and two d10 dice. Then use the formula below to get your random number:

\$1d150 = \big((1d6 \mod 6) \times 25\big) + \big(( 1d10 \mod 5) \times 5\big) + (1d10 \mod 5)\$

This equation gives you 150 different values distributed uniformly. And that's the formula. No rerolls, no special tables, no modifying dice. It's similar logic to KorvinStarmast's answer, but simplified to a one-line equation. Note that the range is technically 0-149, so you can map to the 1-150 range by either adding +1 or using 150 instead of 0.


Since there exists a d10 die, and the last digit is uniformly distributed, we can ignore it entirely. Thus the problem becomes to generate numbers between 1-15 using only dice.

The problem here is obviously the 5 in the 3x5 factorization, since it only appears in d10 and d20.

You indicated in a comment that you don't want to do mental math or rerolls, so you might be against the relatively clean answer of:

  • take 4*[d4] + [d4] - 4, re-roll on 16

which means you only roll 3 die (2d4 and d10) 93% of the time.

as well as the division-requiring answer, e.g.:

  • take 10 * [d6] + [d10] and divide by 4 (rounding up) or take modulo 15 + 1

which never requires re-rolls.

Unfortunately any answer that involves direct addition of 1..n die is going to irrevocably break the uniformity requirement. However, if you are willing to add a little DIY arts and crafts (clear tape + paper to relabel), we can give you a simple addition version that satisfies your requirement.

  • create a "5 * [d3] - 5" die using a d6 relabeled as [0,0,5,5,10,10]
  • create a "[d5]" die using a d10 relabeled as [1,1,2,2,3,3,4,4,5,5]
  • roll these two dice and add them together to get [1..15] uniform

This might require a few minutes to put together, but you would end up with 3 die in your pocket and only adding a small multiple of 5 once for the math.


Roll 3 different coloured d10s:

  • One for the hundreds value
  • One for the tens value
  • One for the ones value

Reroll if the result is over 150.

  • 1
    \$\begingroup\$ Welcome to rpg.se! Take the tour and visit the help center when you get a chance. This would certainly work however you would need to reroll 1/4 of the time. Why not simple halve the second die? Thanks for participating and happy gaming! \$\endgroup\$ – linksassin May 2 '19 at 5:01
  • 1
    \$\begingroup\$ @linksassin It would be rerolling 85% of the time, since the hundreds digit is valid only two ways, and the tens is only valid 3/4 of those two ways. \$\endgroup\$ – SevenSidedDie May 2 '19 at 14:30

Use a six sided dice to roll three digits of a base 6 number, assigning the value 0 to a rolled six. Three rolls give you three numbers, a, b and c, each between zero and five inclusive.

Now compute $$ m = a \times 36 + b \times 6 + c $$ m will be a number between 0 and 215 inclusive.

Then compute $$ n = \mathrm{int}\left(\frac{m \times 150}{ 216}\right) $$ Where int(x) rounds down to the largest integer less than or equal to x. This will give you a random integer uniformly distributed between 0 and 149. Add 1 to get 1 to 150.

  • 1
    \$\begingroup\$ Welcome to RPG.SE! Take the tour if you haven't already and see the help center if you need more guidance. Good Luck and Happy Gaming! \$\endgroup\$ – Someone_Evil May 1 '19 at 18:21
  • \$\begingroup\$ I am sorry. This is actually a very bad method. It does not give an even distribution. You could take m as the final result but discard and reroll when out of range. Alternatively, adding a digit (multiply by 216, finally dividing by 1296) will give a better, but still not perfect, distribution. \$\endgroup\$ – Chris Barry May 1 '19 at 19:19
  • 1
    \$\begingroup\$ @ChrisBarry: I just realized you were commenting on your own answer to say it's a bad method. You're welcome to edit it into a better form. (Don't leave an edit note and just change the end; edit it as if it were always the best form of itself.) If you think it might take some time to edit into a proper form, I think you should be able to delete it, edit it into an acceptable form, and then undelete it yourself. \$\endgroup\$ – V2Blast May 2 '19 at 7:36

Wow... some of these are pretty in-depth. Let's go with the least amount of dice necessary for this. A die 6 and a die 10. Roll the d6 looking for even or odd. Since 1 is odd, we'll make 0 "even". ie, you roll a 4. Even = 0. This will be your first digit. Since it's a zero, roll the d10 twice for the next 2 digits. ie, 4 and 8. Your number is 048. If you roll odd on your 1st d6, now your first digit is 1. Since you can't go over 50, roll the d6 again and subtract 1 for the 2nd digit and then the d10 for the third (obviously ignoring this last step if you rolled a "6", ie 5, for the 2nd digit).

  • 5
    \$\begingroup\$ This doesn't actually give a uniform distribution: With the first roll you have a equal chance of being in the 1-99 range as you do 100-150, which makes the latter range more likely than it should. Also if you are in that range you have a 1-in-6 to get 150 which is way too high. \$\endgroup\$ – Someone_Evil May 1 '19 at 19:02
  • 1
    \$\begingroup\$ Also, welcome to RPG.SE! Take the tour if you haven't already and see the help center if you need more guidance. Good Luck and Happy Gaming! \$\endgroup\$ – Someone_Evil May 1 '19 at 19:02

Not the answer you're looking for?Browse other questions tagged or ask your own question.