Randomization Question - Get a Clear & Informative Response

  • Thread starter Thread starter hoangr
  • Start date Start date
AI Thread Summary
A random function in programming relies on a randomizer, typically a deterministic algorithm with a long repeat cycle, necessitating a seed for generating outputs. For example, using MATLAB's rand() function will yield identical results across multiple calls if the same seed is used. Advanced randomization methods may incorporate physical phenomena, such as measurements from sensitive instruments. Historically, random number tables were utilized before the advent of modern computing. In cryptography, random number generators produce sequences that appear random and pass statistical tests. An example from the C programming language illustrates a simple random number generator that initializes a seed value to ensure consistent results. This feature aids in debugging by allowing reproducibility of outputs. However, the discussed code is not thread-safe, meaning it can lead to issues in multi-threaded environments. The importance of seed initialization in random number generation was highlighted as a crucial aspect often overlooked.
hoangr
2
0
Hi,

I was looking into the mathematical aspect of what makes something 'random', but never asked about the programming view. What happens in a random function that generates an output? Although I still haven't found an answer to my question, I've decided to post it here hoping that I could get a clear and informative response (sometimes Google doesn't cut it).

Thanks,
Ryan
 
Technology news on Phys.org
A random function depends on the randomizer - usually it is a deterministic series with a very long repeat cycle. That's why you usually need to specify a "seed". For instance, if I use the rand() function in MATLAB for n data points, then repeat it twice, the three sets of results will be identical though they look random within each set.

Fancy systems use some physical method like the 10th decimal place in a sensitive temperature gauge of wind speed or something like that.

In the bad old day we used to use a table of "random numbers" that you could buy. It came as part of a book of tables for all those other things you use a computer for now like sine and cosine and the normal distribution and logs.

Randomizing algorithms are an important part of cryptography.
 
Usual random number generators will produce a sequence of numbers (uniformly distributed between 0 and 1) which look random when various statistical tests are applied.
 
K&R (the original C programmers' textbook that started me down this dark path) provides this as the source code for rand ()

Code:
unsigned long int next = 1;

int rand(void)
{
    next = next * 1103515245 + 12345;
    return (unsigned int)(next/65536) % 32768;
}

It requires initialisation of the seed value named "next", and will always return the same sequence of random numbers for the same seed value. Hence, usually you initialise this at the start of your program with some "random" value such as the system time (full date and time, obviously).

edit: Being able to set the seed allows for debugging etc, by being able to guarantee the same results are returned.

I note that it doesn't appear to be thread-safe :-) [edit: if your program spawns multiple threads for working concurrently, the value of next is shared by all]

edit: Yes this is not regarded as current code. I know it's bad code. Don't all jump on me! :)
 
Last edited:
Wow, thanks for those informative responses! For some reason I didn't even consider seeds being a factor in programming these algorithms.

@rorix_bw: Thanks for the code snippet, I've been looking for the source code in other languages and wasn't successful. :P
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...
Back
Top