Package mt19937 implements the 64-bit version of the Mersenne Twister (MT) pseudo-random number generator (PRNG) with a period of 2^19937-1, also known as mt19937_64, according to the reference implementation by Matsumoto and Nishimura at

    MT is not cryptographically secure. Given a sufficiently long sequence of the generated values, one may predict additional values without knowing the seed. A secure hashing algorithm should be used with MT if a CSPRNG is required.

    When possible, the MT generator should be seeded with a slice of bytes or uint64 values to address known "zero-excess" seed initialization issues where "shifted" sequences may be generated for seeds with only a few non-zero bits. For more information, see



    This section is empty.


    This section is empty.


    This section is empty.


    type Source

    type Source struct {
    	// contains filtered or unexported fields

      Source is a pseudo-random number generator that satisfies both math/rand.Source and math/rand.Source64.

      func NewSource

      func NewSource() *Source

        NewSource creates a new unseeded Source.

        func (*Source) Int63

        func (s *Source) Int63() int64

          Int63 returns the next pseudo-random integer on [0, 2^63-1) in the sequence. Both Uint64 and Int63 advance the sequence. Int63 satisfies math/rand.Source64.

          func (*Source) Seed

          func (s *Source) Seed(seed int64)

            Seed initializes the source with the provided value. Note that SeedBytes or SeedValues should be preferred since Mersenne Twister suffers from a "zero-excess" initial state defect where seeds with many zero bits can result in similar/"shifted" sequences. The authors describe the issues:

            func (*Source) SeedBytes

            func (s *Source) SeedBytes(b []byte)

              SeedBytes seeds the mt19937 engine with up to 2496 bytes from a slice. Only the first 2496 bytes of the slice are used. Additional elements are unused.

              func (*Source) SeedVals

              func (s *Source) SeedVals(v []uint64)

                SeedVals seeds the mt19937 engine with up to 312 uint64 values. Only the first 312 values of the slice are used. Additional elements are unused.

                func (*Source) Uint64

                func (s *Source) Uint64() uint64

                  Uint64 returns the next pseudo-random integer on [0, 2^64-1) in the sequence. Uint64 satisfies math/rand.Source.

                  Source Files