Python имеет функцию для имитации c последовательности C rand ()? - PullRequest
0 голосов
/ 21 февраля 2020

Я ищу Python функцию, которая будет имитировать c поведение rand () (и srand ()) в c со следующими требованиями:

  1. Я могу предоставьте то же время эпохи в Python эквиваленте srand () для заполнения функции
  2. Эквивалент rand ()% 256 должен привести к тому же значению символа, что и в c, если оба то же самое семя.

До сих пор я рассматривал как случайную библиотеку, так и случайную библиотеку numpy. Вместо предоставления случайного числа от 0 до 32767, как это делает C, оба выдают число с плавающей точкой от 0 до 1 для своих случайных функций. При попытке random.randint (0,32767) я получил результаты, отличные от тех, которые были в моей функции C.

TL; DR Существует ли существующая функция / библиотека в Python, которая следует той же случайной последовательности, что и C?

Ответы [ 2 ]

3 голосов
/ 21 февраля 2020

Вы не можете сделать Python версию функций rand и srand "follo [w] с одинаковой случайной последовательностью" из C s rand и srand, поскольку C Стандарт не определяет точно, что это за последовательность, даже если дано начальное число. В частности:

0 голосов
/ 21 февраля 2020

Вы можете использовать random.seed(). Следующий пример должен печатать одну и ту же последовательность при каждом запуске:

import random
random.seed(42)
for _ in range(10):
    print(random.randint(0, 32768))

Обновление: только что увидел последний комментарий от OP. Нет, этот код не даст вам ту же последовательность, что и код C, по причинам, указанным в других комментариях. Две разные реализации C также не согласятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...