Re: Generate a sequence of random numbers that sum up to 1?



I'm surprised noone has pursued a course of subtraction rather than
division. Say you want 10 numbers:

s = 1.0
n = []
for x in xrange(9):
.... value = random.random() * s
.... n.append(value)
.... s -= value
....
n.append(s)
n
[0.7279111122901516, 0.082128708606867745, 0.0080516733577621798,
0.12122060245902817, 0.0034460458833209676, 0.0021046234724371184,
0.054109424914363845, 0.00035750970249204185, 0.00051175075536832372,
0.00015854855820800087]
sum(n)
1.0


Either:
1) Just because they're *ordered* doesn't mean they're not *random*,
or
2) You all now know why I'm not a mathematician. ;)

It seems to me that the only constraint on the randomness of my results
is the OP's constraint: that they sum to 1. I'd be fascinated to learn
if and why that wouldn't work.


Robert Brewer
System Architect
Amor Ministries
fumanchu@xxxxxxxx

.