Clicky
Showing changes from revision #3 to #4:
(追記) Added (追記ここまで) | (削除) Removed (削除ここまで) | (削除) Chan (削除ここまで)(追記) ged (追記ここまで)
Restarts or queries the state of the pseudorandom number generator used by random_number
.
If random_seed
is called without arguments, it is(削除) initialized (削除ここまで)(追記) seeded (追記ここまで)(削除) to (削除ここまで)(削除) a (削除ここまで)(削除) default (削除ここまで)(削除) state. (削除ここまで)(削除) The (削除ここまで)(削除) example (削除ここまで)(削除) below (削除ここまで)(削除) shows (削除ここまで)(削除) how (削除ここまで)(削除) to (削除ここまで)(削除) initialize (削除ここまで)(削除) the (削除ここまで)(削除) random (削除ここまで)(削除) seed (削除ここまで) with(削除) a (削除ここまで)(削除) varying (削除ここまで)(削除) seed (削除ここまで)(削除) in (削除ここまで)(削除) order (削除ここまで)(削除) to (削除ここまで)(削除) ensure (削除ここまで)(削除) a (削除ここまで)(削除) different (削除ここまで) random(削除) number (削除ここまで)(追記) data (追記ここまで)(削除) sequence (削除ここまで)(追記) retrieved (追記ここまで)(削除) for (削除ここまで)(追記) from (追記ここまで)(削除) each (削除ここまで)(削除) invocation (削除ここまで)(削除) of (削除ここまで) the(削除) program. (削除ここまで)(追記) operating (追記ここまで)(削除) Note (削除ここまで)(追記) system. (追記ここまで)(削除) that (削除ここまで)(削除) setting (削除ここまで)(削除) any (削除ここまで)(削除) of (削除ここまで)(削除) the (削除ここまで)(削除) seed (削除ここまで)(削除) values (削除ここまで)(削除) to (削除ここまで)(削除) zero (削除ここまで)(削除) should (削除ここまで)(削除) be (削除ここまで)(削除) avoided (削除ここまで)(削除) as (削除ここまで)(削除) it (削除ここまで)(削除) can (削除ここまで)(削除) result (削除ここまで)(削除) in (削除ここまで)(削除) poor (削除ここまで)(削除) quality (削除ここまで)(削除) random (削除ここまで)(削除) numbers (削除ここまで)(削除) being (削除ここまで)(削除) generated. (削除ここまで)
Fortran 95 and later
Subroutine
call random_seed([size, put, get])
size
- (Optional) Shall be a scalar and of type default integer
, with intent(out)
. It specifies the minimum size of the arrays used with the put
and get
arguments.
put
- (Optional) Shall be an array of type default integer
and rank one. It is intent(in)
and the size of the array must be larger than or equal to the number returned by the size
argument.
get
- (Optional) Shall be an array of type default integer
and rank one. It is intent(out)
and the size of the array must be larger than or equal to the number returned by the size
argument.
(削除) subroutine (削除ここまで)(追記) program (追記ここまで)(削除) init_random_seed (削除ここまで)(追記) test_random_seed (追記ここまで)(削除) () (削除ここまで)(追記)
(追記ここまで)(削除)
(削除ここまで)(削除) use (削除ここまで)(削除) (削除ここまで)(削除) iso_fortran_env (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) only (削除ここまで)(削除) : (削除ここまで)(削除) (削除ここまで)(削除) int64 (削除ここまで)(削除)
(削除ここまで)implicit none
integer, allocatable :: seed(:)
integer :: (削除) i (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)n(削除) , (削除ここまで)(追記)
(追記ここまで)(削除) (削除ここまで)(削除) un (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) istat (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) dt (削除ここまで)(削除) ( (削除ここまで)(削除) 8 (削除ここまで)(削除) ), (削除ここまで)(削除) (削除ここまで)(削除) pid (削除ここまで)(削除)
(削除ここまで)(削除) integer (削除ここまで)(削除) ( (削除ここまで)(削除) int64 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) :: (削除ここまで)(削除) (削除ここまで)(削除) t (削除ここまで)(削除)
(削除ここまで)call random_seed(size = n)
allocate(seed(n))
(削除) ! First try if the OS provides a random number generator (削除ここまで)(削除)
(削除ここまで)(削除) open (削除ここまで)(削除) ( (削除ここまで)(削除) newunit (削除ここまで)(削除) = (削除ここまで)(削除) un (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) file (削除ここまで)(削除) = (削除ここまで)(削除) "/dev/urandom" (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) access (削除ここまで)(削除) = (削除ここまで)(削除) "stream" (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) & (削除ここまで)(削除)
(削除ここまで)(削除) form (削除ここまで)(削除) = (削除ここまで)(削除) "unformatted" (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) action (削除ここまで)(削除) = (削除ここまで)(削除) "read" (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) status (削除ここまで)(削除) = (削除ここまで)(削除) "old" (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) iostat (削除ここまで)(削除) = (削除ここまで)(削除) istat (削除ここまで)(削除) ) (削除ここまで)(削除)
(削除ここまで)(削除) if (削除ここまで)(削除) (削除ここまで)(削除) ( (削除ここまで)(削除) istat (削除ここまで)(削除) (削除ここまで)(削除) == (削除ここまで)(削除) (削除ここまで)(削除) 0 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) then (削除ここまで)(削除)
(削除ここまで)(削除) read (削除ここまで)(削除) ( (削除ここまで)(削除) un (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) seed (削除ここまで)(削除)
(削除ここまで)(削除) close (削除ここまで)(削除) ( (削除ここまで)(削除) un (削除ここまで)(削除) ) (削除ここまで)(削除)
(削除ここまで)(削除) else (削除ここまで)(削除)
(削除ここまで)(削除) ! Fallback to XOR:ing the current time and pid. The PID is (削除ここまで)(削除)
(削除ここまで)(削除) ! useful in case one launches multiple instances of the same (削除ここまで)(削除)
(削除ここまで)(削除) ! program in parallel. (削除ここまで)(削除)
(削除ここまで)call (削除) system_clock (削除ここまで)(削除) ( (削除ここまで)(削除) t (削除ここまで)(削除) ) (削除ここまで)(削除)
(削除ここまで)(削除) if (削除ここまで)(削除) (削除ここまで)(削除) ( (削除ここまで)(削除) t (削除ここまで)(削除) (削除ここまで)(削除) == (削除ここまで)(削除) (削除ここまで)(削除) 0 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) then (削除ここまで)(削除)
(削除ここまで)(削除) call (削除ここまで)(削除) (削除ここまで)(削除) date_and_time (削除ここまで)(削除) ( (削除ここまで)(削除) values (削除ここまで)(削除) = (削除ここまで)(削除) dt (削除ここまで)(削除) ) (削除ここまで)(削除)
(削除ここまで)(削除) t (削除ここまで)(削除) (削除ここまで)(削除) = (削除ここまで)(削除) (削除ここまで)(削除) ( (削除ここまで)(削除) dt (削除ここまで)(削除) ( (削除ここまで)(削除) 1 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) - (削除ここまで)(削除) (削除ここまで)(削除) 1970 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 365_int64 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 24 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 60 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 60 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 1000 (削除ここまで)(削除) (削除ここまで)(削除) & (削除ここまで)(削除)
(削除ここまで)(削除) + (削除ここまで)(削除) (削除ここまで)(削除) dt (削除ここまで)(削除) ( (削除ここまで)(削除) 2 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 31_int64 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 24 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 60 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 60 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 1000 (削除ここまで)(削除) (削除ここまで)(削除) & (削除ここまで)(削除)
(削除ここまで)(削除) + (削除ここまで)(削除) (削除ここまで)(削除) dt (削除ここまで)(削除) ( (削除ここまで)(削除) 3 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 24_int64 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 60 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 60 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 1000 (削除ここまで)(削除) (削除ここまで)(削除) & (削除ここまで)(削除)
(削除ここまで)(削除) + (削除ここまで)(削除) (削除ここまで)(削除) dt (削除ここまで)(削除) ( (削除ここまで)(削除) 5 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 60 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 60 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 1000 (削除ここまで)(削除) (削除ここまで)(削除) & (削除ここまで)(削除)
(削除ここまで)(削除) + (削除ここまで)(削除) (削除ここまで)(削除) dt (削除ここまで)(削除) ( (削除ここまで)(削除) 6 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 60 (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 1000 (削除ここまで)(削除) (削除ここまで)(削除) + (削除ここまで)(削除) (削除ここまで)(削除) dt (削除ここまで)(削除) ( (削除ここまで)(削除) 7 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 1000 (削除ここまで)(削除) (削除ここまで)(削除) & (削除ここまで)(削除)
(削除ここまで)(削除) + (削除ここまで)(削除) (削除ここまで)(削除) dt (削除ここまで)(削除) ( (削除ここまで)(削除) 8 (削除ここまで)(削除) ) (削除ここまで)(削除)
(削除ここまで)(削除) end (削除ここまで)(削除) (削除ここまで)(削除) if (削除ここまで)(削除)
(削除ここまで)(削除) pid (削除ここまで)(削除) (削除ここまで)(削除) = (削除ここまで)(削除) (削除ここまで)(削除) getpid (削除ここまで)(削除) () (削除ここまで)(削除)
(削除ここまで)(削除) t (削除ここまで)(削除) (削除ここまで)(削除) = (削除ここまで)(削除) (削除ここまで)(削除) ieor (削除ここまで)(削除) ( (削除ここまで)(削除) t (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) int (削除ここまで)(削除) ( (削除ここまで)(削除) pid (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) kind (削除ここまで)(削除) ( (削除ここまで)(削除) t (削除ここまで)(削除) ))) (削除ここまで)(削除)
(削除ここまで)(削除) do (削除ここまで)(削除) (削除ここまで)(削除) i (削除ここまで)(削除) (削除ここまで)(削除) = (削除ここまで)(削除) (削除ここまで)(削除) 1 (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) n (削除ここまで)(削除)
(削除ここまで)(削除) seed (削除ここまで)(削除) ( (削除ここまで)(削除) i (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) = (削除ここまで)(削除) (削除ここまで)(削除) lcg (削除ここまで)(削除) ( (削除ここまで)(削除) t (削除ここまで)(削除) ) (削除ここまで)(削除)
(削除ここまで)(削除) end (削除ここまで)(削除) (削除ここまで)(削除) do (削除ここまで)(削除)
(削除ここまで)(削除) end (削除ここまで)(削除) (削除ここまで)(削除) if (削除ここまで)(削除)
(削除ここまで)(削除) call (削除ここまで)(削除) (削除ここまで)random_seed((削除) put (削除ここまで)(追記) get (追記ここまで)=seed)(削除) contains (削除ここまで)(追記) write (追記ここまで)(削除)
(削除ここまで)(削除) ! (削除ここまで)(追記) (*, (追記ここまで)(削除) This (削除ここまで)(削除) simple (削除ここまで)(削除) PRNG (削除ここまで)(削除) might (削除ここまで)(削除) not (削除ここまで)(削除) be (削除ここまで)(削除) good (削除ここまで)(削除) enough (削除ここまで)(削除) for (削除ここまで)(削除) real (削除ここまで)(削除) work, (削除ここまで)(削除) but (削除ここまで)(削除) is (削除ここまで)(削除)
(削除ここまで)(削除) ! (削除ここまで)(追記) *) (追記ここまで)(削除) sufficient (削除ここまで)(削除) for (削除ここまで)(削除) seeding (削除ここまで)(削除) a (削除ここまで)(削除) better (削除ここまで)(削除) PRNG. (削除ここまで)(削除)
(削除ここまで)(削除) function (削除ここまで)(追記) seed (追記ここまで)(削除) lcg (削除ここまで)(追記)
(追記ここまで)(削除) ( (削除ここまで)(削除) s (削除ここまで)(削除) ) (削除ここまで)(削除)
(削除ここまで)(削除) integer (削除ここまで)(削除) (削除ここまで)(削除) :: (削除ここまで)(削除) (削除ここまで)(削除) lcg (削除ここまで)(削除)
(削除ここまで)(削除) integer (削除ここまで)(削除) ( (削除ここまで)(削除) int64 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) :: (削除ここまで)(削除) (削除ここまで)(削除) s (削除ここまで)(削除)
(削除ここまで)(削除) if (削除ここまで)(削除) (削除ここまで)(削除) ( (削除ここまで)(削除) s (削除ここまで)(削除) (削除ここまで)(削除) == (削除ここまで)(削除) (削除ここまで)(削除) 0 (削除ここまで)(削除) ) (削除ここまで)(削除) (削除ここまで)(削除) then (削除ここまで)(削除)
(削除ここまで)(削除) s (削除ここまで)(削除) (削除ここまで)(削除) = (削除ここまで)(削除) (削除ここまで)(削除) 104729 (削除ここまで)(削除)
(削除ここまで)(削除) else (削除ここまで)(削除)
(削除ここまで)(削除) s (削除ここまで)(削除) (削除ここまで)(削除) = (削除ここまで)(削除) (削除ここまで)(削除) mod (削除ここまで)(削除) ( (削除ここまで)(削除) s (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) 4294967296_int64 (削除ここまで)(削除) ) (削除ここまで)(削除)
(削除ここまで)end (削除) if (削除ここまで)(追記) program (追記ここまで)(削除)
(削除ここまで)(追記) test_random_seed (追記ここまで)(削除) s (削除ここまで)(削除) (削除ここまで)(削除) = (削除ここまで)(削除) (削除ここまで)(削除) mod (削除ここまで)(削除) ( (削除ここまで)(削除) s (削除ここまで)(削除) (削除ここまで)(削除) * (削除ここまで)(削除) (削除ここまで)(削除) 279470273_int64 (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) 4294967291_int64 (削除ここまで)(削除) ) (削除ここまで)(削除)
(削除ここまで)(削除) lcg (削除ここまで)(削除) (削除ここまで)(削除) = (削除ここまで)(削除) (削除ここまで)(削除) int (削除ここまで)(削除) ( (削除ここまで)(削除) mod (削除ここまで)(削除) ( (削除ここまで)(削除) s (削除ここまで)(削除) , (削除ここまで)(削除) (削除ここまで)(削除) int (削除ここまで)(削除) ( (削除ここまで)(削除) huge (削除ここまで)(削除) ( (削除ここまで)(削除) 0 (削除ここまで)(削除) ), (削除ここまで)(削除) (削除ここまで)(削除) int64 (削除ここまで)(削除) )), (削除ここまで)(削除) (削除ここまで)(削除) kind (削除ここまで)(削除) ( (削除ここまで)(削除) 0 (削除ここまで)(削除) )) (削除ここまで)(削除)
(削除ここまで)(削除) end (削除ここまで)(削除) (削除ここまで)(削除) function (削除ここまで)(削除) lcg (削除ここまで)(削除)
(削除ここまで)(削除) end (削除ここまで)(削除) (削除ここまで)(削除) subroutine (削除ここまで)(削除) init_random_seed (削除ここまで)