есть ли в python эквивалент drand48 () или оболочки?

1

Я конвертирую некоторый c-код в python. Мне интересно, есть ли какой-либо эквивалент drand48() в python (точно такой же!) Или оболочка?

большое спасибо

Теги:
random

1 ответ

6
Лучший ответ

Вы ищете 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.

  • 0
    Я не уверен, что вывод совпадает с drand48 () ... Так вот почему я задал вопрос ...
  • 0
    Его вывод будет другим, потому что он использует другой алгоритм для генерации чисел. Однако обе функции аппроксимируют равномерное (0,1) распределение.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню