The code snippet seems OK to me, although the code you have in the if block will happen 80% not 20% of the time, and it could be made a bit "slimmer".
But you say it happens less than 20%?
Tried this on by Ubuntu box with Ruby 1.8.7:
irb(main):021:0> counter = 0
=> 0
irb(main):022:0> 1000000.times{counter += 1 if rand(100) < 20}
=> 1000000
irb(main):023:0> puts String(Float(counter)/10000) + "%"
20.0002%
=> nil
=> 0
irb(main):022:0> 1000000.times{counter += 1 if rand(100) < 20}
=> 1000000
irb(main):023:0> puts String(Float(counter)/10000) + "%"
20.0002%
=> nil
So, given a million iterations, it seems to work OK, and gives the expected result of close to 20% hitrate.
But if you still have problems, then I'm at a loss.... Some platform specific seeding issue perhaps?
Well, hope this helps... :o)
Regards,
Rolf
On Sun, Mar 21, 2010 at 5:12 PM, Heinz Strunk <lists@ruby-forum.com> wrote:
Hello,
I'm working with probability and Ruby doesn't really does as I want.
Just to make it easier to understand I'll focus on the problem.
I have some event that should occur in 20% of all events. I thought I'd
make it easy by just using rand like following:
num = 20 - rand(100)
if(num > 0)
do_stuff
end
But "do_stuff" is by far not being called as often as I would like it
to. Is there any method or something that is more accurate with that
kind of stuff?
Thanks in advance!
--
Posted via http://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
No comments:
Post a Comment