mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
fix rand pseudo-random number generator
Fixed more documentation and code comments that referred to the old additive 55 (a55) shuffle pseudo-random number generator. We have been using the subtractive 100 shuffle pseudo-random number generator in place of the additive 55 generator for a while now.
This commit is contained in:
6
CHANGES
6
CHANGES
@@ -170,6 +170,12 @@ The following are the changes from calc version 2.14.3.5 to date:
|
||||
Added to test 94dd, read of a number of new calc resource files
|
||||
that are not already read as a result of the calc regression test suite.
|
||||
|
||||
Fixed more documentation and code comments that referred to the
|
||||
old additive 55 (a55) shuffle pseudo-random number generator.
|
||||
We have been using the subtractive 100 shuffle pseudo-random
|
||||
number generator in place of the additive 55 generator for a
|
||||
while now.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.14.3.4 to 2.14.3.5:
|
||||
|
||||
|
@@ -1130,7 +1130,7 @@ randbitrun.cal
|
||||
the number and length of identical bits runs match what is expected.
|
||||
By default, run_cnt is to test the next 65536 random values.
|
||||
|
||||
This tests the a55 generator.
|
||||
This tests the subtractive 100 shuffle pseudo-random number generator.
|
||||
|
||||
|
||||
randmprime.cal
|
||||
@@ -1177,7 +1177,7 @@ randrun.cal
|
||||
64 bit values. By default, run_cnt is to test the next 65536
|
||||
random values.
|
||||
|
||||
This tests the a55 generator.
|
||||
This tests the subtractive 100 shuffle pseudo-random number generator.
|
||||
|
||||
repeat.cal
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* randbitrun - check rand bit run lengths of the a55 generator
|
||||
* randbitrun - check rand bit run lengths of the subtractive 100 shuffle generator
|
||||
*
|
||||
* Copyright (C) 1999 Landon Curt Noll
|
||||
* Copyright (C) 1999,2023 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -1737,7 +1737,7 @@ print '024: parsed test_list()';
|
||||
/*
|
||||
* test 025: define test_rand for test 15dd
|
||||
*
|
||||
* This function tests the a55 shuffle pseudo-random number generator.
|
||||
* This function tests the subtractive 100 shuffle pseudo-random number generator.
|
||||
*/
|
||||
define test_rand()
|
||||
{
|
||||
@@ -3547,6 +3547,12 @@ define test_trig()
|
||||
vrfy(tnum++ == 3407, '3407: tnum == 3407');
|
||||
pi = pi(1e-20);
|
||||
|
||||
/* test trigonometric sine */
|
||||
vrfy(sin(0, 1e-10) == 0,
|
||||
strcat(str(tnum++), ': sin(0, 1e-10) == 0'));
|
||||
vrfy(sin(pi/6, 1e-10) == 0.5,
|
||||
strcat(str(tnum++), ': sin(pi/6, 1e-10) == 0.5'));
|
||||
|
||||
/* test versed trigonometric sine */
|
||||
vrfy(versin(0, 1e-10) == 0,
|
||||
strcat(str(tnum++), ': versin(0, 1e-10) == 0'));
|
||||
@@ -8297,7 +8303,7 @@ return test_list();
|
||||
|
||||
|
||||
/*
|
||||
* test 15dd: test the a55 shuffle pseudo-random number generator
|
||||
* test 15dd: test the subtractive 100 shuffle pseudo-random number generator
|
||||
*/
|
||||
print;
|
||||
return test_rand();
|
||||
|
@@ -148,9 +148,9 @@ STATIC struct infoname sys_info[] = {
|
||||
(FULL)0},
|
||||
{"HIST_SIZE", "Default history size", NULL,
|
||||
(FULL)HIST_SIZE},
|
||||
{"INIT_J", "initial 1st walking a55 table index", NULL,
|
||||
{"INIT_J", "initial 1st walking subtractive 100 shuffle table index", NULL,
|
||||
(FULL)INIT_J},
|
||||
{"INIT_K", "initial 2nd walking a55 table index", NULL,
|
||||
{"INIT_K", "initial 2nd walking subtractive 100 shuffle table index", NULL,
|
||||
(FULL)INIT_K},
|
||||
{"INODE_BITS", "inode number size in bits", NULL,
|
||||
(FULL)INODE_BITS},
|
||||
@@ -222,7 +222,7 @@ STATIC struct infoname sys_info[] = {
|
||||
(FULL)SBYTES},
|
||||
{"SCNT", "length of subtractive 100 table in FULLs", NULL,
|
||||
(FULL)SCNT},
|
||||
{"SEEDXORBITS", "low bits of a55 seed devoted to xor", NULL,
|
||||
{"SEEDXORBITS", "low bits of subtractive 100 shuffle pseudo-random number generator seed devoted to xor", NULL,
|
||||
(FULL)SEEDXORBITS},
|
||||
{"SHALFS", "size of additive or shuffle entry in HALFs", NULL,
|
||||
(FULL)SHALFS},
|
||||
|
16
func.c
16
func.c
@@ -997,7 +997,7 @@ f_rand(int count, NUMBER **vals)
|
||||
/* parse args */
|
||||
switch (count) {
|
||||
case 0: /* rand() == rand(2^64) */
|
||||
/* generate an a55 random number */
|
||||
/* generate an subtractive 100 shuffle pseudo-random number */
|
||||
ans = qalloc();
|
||||
zrand(SBITS, &ans->num);
|
||||
break;
|
||||
@@ -1031,7 +1031,7 @@ f_rand(int count, NUMBER **vals)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* return the a55 random number */
|
||||
/* return the subtractive 100 shuffle pseudo-random number */
|
||||
return ans;
|
||||
}
|
||||
|
||||
@@ -1064,7 +1064,7 @@ f_randbit(int count, NUMBER **vals)
|
||||
}
|
||||
|
||||
/*
|
||||
* generate an a55 random number or skip random bits
|
||||
* generate an subtractive 100 shuffle pseudo-random number or skip random bits
|
||||
*/
|
||||
ans = qalloc();
|
||||
cnt = ztolong(vals[0]->num);
|
||||
@@ -1078,7 +1078,7 @@ f_randbit(int count, NUMBER **vals)
|
||||
}
|
||||
|
||||
/*
|
||||
* return the a55 random number
|
||||
* return the subtractive 100 shuffle pseudo-random number
|
||||
*/
|
||||
return ans;
|
||||
}
|
||||
@@ -1096,14 +1096,14 @@ f_srand(int count, VALUE **vals)
|
||||
/* parse args */
|
||||
switch (count) {
|
||||
case 0:
|
||||
/* get the current a55 state */
|
||||
/* get the current subtractive 100 shuffle pseudo-random number generator state */
|
||||
result.v_rand = zsrand(NULL, NULL);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
switch (vals[0]->v_type) {
|
||||
case V_NUM: /* srand(seed) */
|
||||
/* seed a55 and return previous state */
|
||||
/* seed subtractive 100 shuffle pseudo-random number generator and return previous state */
|
||||
if (!qisint(vals[0]->v_num)) {
|
||||
math_error(
|
||||
"srand number seed must be an integer");
|
||||
@@ -1113,7 +1113,7 @@ f_srand(int count, VALUE **vals)
|
||||
break;
|
||||
|
||||
case V_RAND: /* srand(state) */
|
||||
/* set a55 state and return previous state */
|
||||
/* set subtractive 100 shuffle pseudo-random number generator state and return previous state */
|
||||
result.v_rand = zsetrand(vals[0]->v_rand);
|
||||
break;
|
||||
|
||||
@@ -1267,7 +1267,7 @@ f_srandom(int count, VALUE **vals)
|
||||
break;
|
||||
|
||||
case V_RANDOM: /* srandom(state) */
|
||||
/* set a55 state and return previous state */
|
||||
/* set subtractive 100 shuffle pseudo-random number generator state and return previous state */
|
||||
result.v_random = zsetrandom(vals[0]->v_random);
|
||||
break;
|
||||
|
||||
|
Reference in New Issue
Block a user