Я конвертирую некоторый c-код в python. Мне интересно, есть ли какой-либо эквивалент drand48() в python (точно такой же!) Или оболочка?
большое спасибо
Вы ищете random.random
.
>>> import random
>>> help(random)
>>> random.random()
0.8423026866867628
Он не использует тот же генератор, что и drand48
. В семействе drand48
используется 48-битный линейный конгруэнтный генератор, тогда как в случайном модуле Python используется превосходный алгоритм Mersenne Twister.
Если вы хотите получить тот же результат, что и drand48
, вы можете реализовать его в Python.
# Uncomment the next line if using Python 2.x...
# from __future__ import division
class Rand48(object):
def __init__(self, seed):
self.n = seed
def seed(self, seed):
self.n = seed
def srand(self, seed):
self.n = (seed << 16) + 0x330e
def next(self):
self.n = (25214903917 * self.n + 11) & (2**48 - 1)
return self.n
def drand(self):
return self.next() / 2**48
def lrand(self):
return self.next() >> 17
def mrand(self):
n = self.next() >> 16
if n & (1 << 31):
n -= 1 << 32
return n
Однако выход будет значительно уступать стандартным генератора случайных чисел Python. Семейство функций rand48
было объявлено устаревшим в 1989 году SVID 3.