My thought on your issue is that you are probably running into an issue with the pseudo-random number generator. The problem is that it isn't truly random. For most instances, this isn't a problem but because you are generating such quantities, you might be running into a problem with it.
My suggestion would be to change your generator to increase its randomness and see if that brings you closer to your expected result. Here are some options for you to try:
http://stackoverflow.com/questions/1234094/how-can-i-generate-truly-not-pseudo-random-numbers-with-c[
^]
As for us developing one as well, this isn't the place to ask for something like that. You won't get the exposure to your request that you want and it really doesn't fit as a question.