---
name: "Math::Random::MT"
section: "3pm"
platform: "linux"
package: "libmath-random-mt-perl"
version: "1.17-2+b4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Math::Random::MT"
---

# Math::Random::MT(3pm)

The Mersenne Twister PRNG

## NAME

Math::Random::MT - The Mersenne Twister PRNG

## SYNOPSIS

```
  ## Object-oriented interface:
  use Math::Random::MT;
  $gen = Math::Random::MT->new()        # or...
  $gen = Math::Random::MT->new($seed);  # or...
  $gen = Math::Random::MT->new(@seeds);
  $seed = $gen->get_seed();             # seed used to generate the random numbers
  $rand = $gen->rand(42);               # random number in the interval [0, 42)
  $dice = int($gen->rand(6)+1);         # random integer between 1 and 6
  $coin = $gen->rand() < 0.5 ?          # flip a coin
    "heads" : "tails"
  $int = $gen->irand();                 # random integer in [0, 2^32-1]
  ## Function-oriented interface:
  use Math::Random::MT qw(srand rand irand);
  # now use srand() and rand() as you usually do in Perl
```

## DESCRIPTION

The Mersenne Twister is a pseudorandom number generator developed by Makoto Matsumoto and Takuji Nishimura. It is described in their paper at \<URL:http://www.math.keio.ac.jp/~nisimura/random/doc/mt.ps\>. This algorithm has a very uniform distribution and is good for modelling purposes but do not use it for cryptography.

This module implements two interfaces:

### Object-oriented interface

- **new()**

  Creates a new generator that is automatically seeded based on gettimeofday.

- new($seed)

  Creates a new generator seeded with an unsigned 32-bit integer.

- new(@seeds)

  Creates a new generator seeded with an array of (up to 624) unsigned 32-bit integers.

- **set\_seed()**

  Seeds the generator and returns the seed used. It takes the same arguments as ***new()***.

- **get\_seed()**

  Retrieves the value of the seed used.

- rand($num)

  Behaves exactly like Perl's builtin **rand()**, returning a number uniformly distributed in \[0, `$num`) ($num defaults to 1).

- **irand()**

  Returns a 32-bit integer, i.e. an integer uniformly distributed in \[0, 2^32-1\].

### Function-oriented interface

- srand($seed)

  Behaves just like Perl's builtin **srand()**. As in Perl \>= 5.14, the seed is returned. If you use this interface, it is strongly recommended that you call ***srand()*** explicitly, rather than relying on ***rand()*** to call it the first time it is used.

- rand($num)

  Behaves exactly like Perl's builtin **rand()**, returning a number uniformly distributed in \[0, `$num`) ($num defaults to 1).

- **irand()**

  Returns a 32-bit integer, i.e. an integer uniformly distributed in \[0, 2^32-1\].

## SEE ALSO

\<URL:http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\>

Data::Entropy

## ACKNOWLEDGEMENTS

- Sean M. Burke

  For giving me the idea to write this module.

- Philip Newton

  For several useful patches.

- Florent Angly

  For implementing seed generation and retrieval.

## AUTHOR

Abhijit Menon-Sen \<ams@toroid.org\>

Copyright 2001 Abhijit Menon-Sen. All rights reserved.

Based on the C implementation of MT19937 Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura

This software is distributed under a (three-clause) BSD-style license. See the LICENSE file in the distribution for details.
