blob: 05174f9f0a7149ef8b178e8919a59fb4becde47e [file] [log] [blame]
# File src/library/base/R/files.R
# Part of the R package, https://www.R-project.org
#
# Copyright (C) 2007 R Core Team
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# A copy of the GNU General Public License is available at
# https://www.R-project.org/Licenses/
.TAOCP1997init <- function(seed)
{
KK <- 100L; LL <- 37L; MM <- as.integer(2^30)
KKK <- KK + KK - 1L; KKL <- KK - LL
ss <- seed - (seed %% 2L) + 2L
X <- integer(KKK)
for(j in 1L:KK) {
X[j] <- ss
ss <- ss+ss
if(ss >= MM) ss <- ss - MM + 2L
}
X[2L] <- X[2L] + 1L
ss <- seed
T <- 69L
while(T > 0) {
for(j in KK:2L) X[j + j - 1L] <- X[j]
for(j in seq(KKK, KKL + 1L, -2L))
X[KKK - j + 2L] <- X[j] - (X[j] %% 2L)
for(j in KKK:(KK+1L))
if(X[j] %% 2L == 1L) {
X[j - KKL] <- (X[j - KKL] - X[j]) %% MM
X[j - KK] <- (X[j - KK] - X[j]) %% MM
}
if(ss %% 2L == 1L) {
for(j in KK:1L) X[j + 1L] <- X[j]
X[1L] <- X[KK + 1L]
if(X[KK + 1L] %% 2L == 1L)
X[LL + 1L] <- (X[LL + 1L] - X[KK + 1L]) %% MM
}
if(ss) ss <- ss %/% 2L else T <- T - 1L
}
rs <- c(X[(LL+1L):KK], X[1L:LL])
invisible(rs)
}