This is my understanding too. But people are different. Angkor originally asked:
The solution mentioned by Misha above satisfies that:
1) it results in a number that is random;
2) the number is between 1 and 8
3) the number is an integer
Those interested in details about how computers operate with random numbers may refer to e.g. this very nicely written chapter: https://galileo.phys.virginia.edu/compfac/courses/practical-c/02.pdf
(see paragraph 2.7).
Assuming that the original poster indeed wanted equal probabilities for each outcome, the critique of @FMBARBA relies on Quest.IRnd() to have equal probabilities of 0.1 and 0.2 and other numbers in his/her simulations. Whether it is true or not is a different question all together. Survey Solutions relies on C#'s built-in random number generator (which generates random numbers uniformly distributed on the interval [0;1) ):
public static double GetRandomDouble(this Guid id)
Random r = new Random(id.GetHashCode());
It’s properties are sufficient to make a conclusion, that if you start from a random point determined from the id (seed) and take a million realizations, then the obtained sample will pass the uniformity tests (will look like a uniformly distributed random value).
But in practice, don’t forget, that Survey Solutions doesn’t do that. Instead a million random number generators are generated, and each generator is asked for a single random number. And in order to make them produce different results, the id of the interview is supplied. This brings in two potential problems:
- whether the GUIDs of the interviews are generated uniformly (I know they appear as text, but think of them as huge hexadecimal numbers)
- whether the algorithm that initializes random number generators in C# is somehow treating them unequally.
Both are beyond immediate intuition, they may or may not be true.
In addition, the random realizations here are not independent from the human will. An interviewer may instantiate an interview, discard it, and repeat, until she gets a number sufficiently close to the desired (and you can get an estimate of how many retries she needs for that).
So, whether values obtained from Quest.IRnd() in a large sample will follow a uniform distribution, is (imho) not guaranteed. Whether they are seen as such, you can ask other colleagues doing massive data collection, such as the users from Statistics South Africa or Zambia CSO.
In practice I would guide myself by the following rule: if the need for randomness is purely to make the questionnaire look differently, such as present the options in a different order, then none of the considerations above are of any importance. Good to go with Quest.IRnd(). But if your need for randomness is some sort of design experiment where rigorous assumptions about distributions are made and must be followed, then the question is not so simple.
So, no, not a rhetorical question.