equal
deleted
inserted
replaced
908 (** Recommended by Stephen K. Park and Keith W. Miller, |
908 (** Recommended by Stephen K. Park and Keith W. Miller, |
909 Random number generators: good ones are hard to find, |
909 Random number generators: good ones are hard to find, |
910 CACM 31 (1988), 1192-1201. |
910 CACM 31 (1988), 1192-1201. |
911 Real number version for systems with 46-bit mantissae |
911 Real number version for systems with 46-bit mantissae |
912 Computes (a*seed) mod m ; should be applied to integers only! **) |
912 Computes (a*seed) mod m ; should be applied to integers only! **) |
913 local val a = 16807.0 and m = 2147483647.0 |
913 local val a = 16807.0 and m = 2147483647.0 (* 2^31 - 1 *) |
914 in fun nextrandom seed = |
914 in fun nextrandom seed = |
915 let val t = a*seed |
915 let val t = a*seed |
916 in t - m * real(floor(t/m)) end |
916 in t - m * real(floor(t/m)) end |
917 end; |
917 end; |
918 |
918 |
933 else if i<62 then chr (k0+i-52) |
933 else if i<62 then chr (k0+i-52) |
934 else if i=62 then "_" |
934 else if i=62 then "_" |
935 else (*i=63*) "'" |
935 else (*i=63*) "'" |
936 in implode (map char (radixpand (64,n))) end; |
936 in implode (map char (radixpand (64,n))) end; |
937 |
937 |
938 (*Randomly generated identifiers with given prefix; MUST start with a letter*) |
938 (*Randomly generated identifiers with given prefix; MUST start with a letter |
|
939 [division by two avoids overflow for ML systems whose maxint is 2^30 - 1 *) |
939 fun gensym pre = pre ^ |
940 fun gensym pre = pre ^ |
940 (#1(newid (floor (!seedr)), seedr := nextrandom (!seedr))) |
941 (#1(newid (floor (!seedr/2.0)), |
|
942 seedr := nextrandom (!seedr))) |
941 |
943 |
942 (*Increment a list of letters like a reversed base 26 number. |
944 (*Increment a list of letters like a reversed base 26 number. |
943 If head is "z", bumps chars in tail. |
945 If head is "z", bumps chars in tail. |
944 Digits are incremented as if they were integers. |
946 Digits are incremented as if they were integers. |
945 "_" and "'" are not changed. |
947 "_" and "'" are not changed. |