odd_random_integer Subroutine

public subroutine odd_random_integer(harvest)

Returns a 64 bit pseudo random integer, harvest, distributed uniformly over the odd integers of the 64 bit kind. (Specification)

Arguments

Type IntentOptional Attributes Name
integer(kind=int64), intent(out) :: harvest

Source Code

    subroutine odd_random_integer( harvest )
!! Version: experimental
!!
!! Returns a 64 bit pseudo random integer, `harvest`, distributed uniformly over
!! the odd integers of the 64 bit kind.
!! ([Specification](../page/specs/stdlib_hash_procedures.html#odd_random_integer-returns-odd-integer))

        integer(int64), intent(out) :: harvest
        real(dp) :: sample(2)
        integer(int32) :: part(2)

        call random_number( sample )
        part = int( floor( sample * 2_int64**32, int64 ) - 2_int64**31, int32 )
        harvest = transfer( part, harvest )
        harvest = ishft( harvest, 1 ) + 1_int64

    end subroutine odd_random_integer