comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Generating N random numbers that add to a TOTAL
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Generating N random numbers that add to a TOTAL [message #89228] Wed, 06 August 2014 20:52 Go to previous message
cgguido is currently offline  cgguido
Messages: 195
Registered: August 2005
Senior Member
Hi all,

I am wondering if anybody has suggestions on how to improve the function below. It seems ok for floating precision numbers.

For integers it's a different story:
It works great if N<<TOTAL. When N approaches TOTAL I get a few numbers and then a bunch of zeros... Also, setting /DIFFERENT makes it run for ever if N is large. Also, the sum of res adds up TOTAL=/-1, not always to TOTAL exactly...

Suggestions?

Thanks,
Gianguido



FUNCTION nrndaddto, n, total, integers = integers, different = different

compile_opt idl2

res = dblarr(n)
res[0] = randomu(seed, 1, /double)*(total)

FOR i = 1, n-2 DO BEGIN
res[i] = randomu(seed, 1, /double)*(total-total(res[0:i-1], /double))
ENDFOR
res[n-1] = total-total(res[0:n-2], /double)

IF ~keyword_set(integers) THEN integers = 0

IF keyword_set(integers) THEN res = round(res)
IF keyword_set(different) THEN BEGIN
IF n_elements(res) NE n_elements(unique(res, /sort)) THEN res = $
nrndaddto(n, total, integers = integers, different = 1)
ENDIF


RETURN, res
END
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: How to find the confidence interval of a variable data at 95% or 66%?
Next Topic: get_lun & free_lun

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Fri Oct 10 08:07:01 PDT 2025

Total time taken to generate the page: 0.00717 seconds