Reading a recent junk-thread, I realized the algorithms for rand and random have changed numerous times since the late 80's.
As such you cannot trust that a seed given 20 years ago, produces the same sequence today. I did a rough study of the commits to our versions. Other operating systems changed their algorithms at different times. I think rand and random algorithm changed about 5 times (combined). But wait there is MORE! These functions mix "long" and "int", and rely upon wraparound, so 32-bit vs 64-bit behaviour occur. I'm wondering if the following wording will disuade people from playing this stupid deterministic game, or arguing that these specific functions serve such a purpose. I suppose the two lessons are: - if you need determinism, write your own. - do not rely upon an external function which will make your seed produce a different result approximately every 8 years. People keep talking about the value of determinism, and in particular for these specific function names, so I'm hoping to put the argument to rest. I stopped short by avoiding the phrase "undefined behaviour". Index: stdlib/rand.3 =================================================================== RCS file: /cvs/src/lib/libc/stdlib/rand.3,v retrieving revision 1.19 diff -u -p -u -r1.19 rand.3 --- stdlib/rand.3 9 Dec 2014 21:55:39 -0000 1.19 +++ stdlib/rand.3 12 Feb 2021 05:36:52 -0000 @@ -78,6 +78,9 @@ can be substituted for then subsequent .Fn rand calls will return results using the deterministic algorithm. +The deterministic sequence algorithm changed a number of times since +original development, is underspecified, and should not be relied up to +remain consistant between platforms and over time. .Pp The .Fn rand Index: stdlib/random.3 =================================================================== RCS file: /cvs/src/lib/libc/stdlib/random.3,v retrieving revision 1.28 diff -u -p -u -r1.28 random.3 --- stdlib/random.3 9 Dec 2014 21:55:39 -0000 1.28 +++ stdlib/random.3 12 Feb 2021 05:36:52 -0000 @@ -96,6 +96,9 @@ a default table of size 31 long integers numbers in the range from 0 to (2**31)\-1. The period of this random number generator is very large, approximately 16*((2**31)\-1), but the results are a deterministic sequence from the seed. +The deterministic sequence algorithm changed a number of times since +original development, is underspecified, and should not be relied up to +remain consistant between platforms and over time. .Pp The .Fn initstate