Module: Random::Implementation

### Home Classes Methods

### In Files

- lib/backports/extra/random/implementation.rb

### Methods

- ::new
- #==
- #bytes
- #marshal_dump
- #marshal_load
- #rand
- #srand

### Class/Module Index

Quicksearch

- Prime
- Prime::EratosthenesGenerator
- Prime::EratosthenesSieve
- Prime::Generator23
- Prime::OldCompatibility
- Prime::PseudoPrimeGenerator
- Prime::TrialDivision
- Prime::TrialDivisionGenerator
- Backports
- Backports::MOST_EXTREME_OBJECT_EVER
- Backports::StdLib
- Backports::StdLib::LoadedFeatures
- Enumerator
- Enumerator::GeneratorBP
- Enumerator::Lazy
- Enumerator::Yielder
- Matrix
- Matrix::EigenvalueDecomposition
- Matrix::LUPDecomposition
- Random
- Random::Implementation
- Random::MT19937
- Enumerable
- Enumerable::Enumerator
- File
- File::Constants
- ARGF
- Array
- BasicObject
- Binding
- Complex
- Dir
- ENV
- Fixnum
- Float
- GC
- Hash
- IO
- Integer
- Kernel
- Math
- Method
- Module
- NilClass
- Numeric
- Object
- ObjectSpace
- OpenStruct
- Proc
- Process
- Range
- Regexp
- Set
- StopIteration
- String
- Struct
- Symbol
- UnboundMethod

No matching classes.

# Random::Implementation

Implementation corresponding to the actual Random class of Ruby The actual random generator (mersenne twister) is in MT19937. Ruby specific conversions are handled in bits_and_bytes. The high level stuff (argument checking) is done here.

### Attributes

seed[R]

### Public Class Methods

new(seed = 0) click to toggle source

    # File lib/backports/extra/random/implementation.rb, line 10
    def initialize(seed = 0)
      super()
      srand(seed)
    end

### Public Instance Methods

==(other) click to toggle source

    # File lib/backports/extra/random/implementation.rb, line 42
    def ==(other)
      other.is_a?(Random) &&
        seed == other.seed &&
        left == other.send(:left) &&
        state == other.send(:state)
    end

bytes(nb) click to toggle source

    # File lib/backports/extra/random/implementation.rb, line 36
    def bytes(nb)
      nb = Backports.coerce_to_int(nb)
      raise ArgumentError, "negative size" if nb < 0
      @mt.random_bytes(nb)
    end

marshal_dump() click to toggle source

    # File lib/backports/extra/random/implementation.rb, line 49
    def marshal_dump
      @mt.marshal_dump << @seed
    end

marshal_load(ary) click to toggle source

    # File lib/backports/extra/random/implementation.rb, line 53
    def marshal_load(ary)
      @seed = ary.pop
      @mt = MT19937.allocate
      @mt.marshal_load(ary)
    end

rand(limit = Backports::Undefined) click to toggle source

    # File lib/backports/extra/random/implementation.rb, line 22
    def rand(limit = Backports::Undefined)
      case limit
        when Backports::Undefined
          @mt.random_float
        when Float
          limit * @mt.random_float unless limit <= 0
        when Range
          _rand_range(limit)
        else
          limit = Backports.coerce_to_int(limit)
          @mt.random_integer(limit) unless limit <= 0
      end || raise(ArgumentError, "invalid argument #{limit}")
    end

srand(new_seed = 0) click to toggle source

    # File lib/backports/extra/random/implementation.rb, line 15
    def srand(new_seed = 0)
      new_seed = Backports.coerce_to_int(new_seed)
      old, @seed = @seed, new_seed.nonzero? || Random.new_seed
      @mt = MT19937[ @seed ]
      old
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.