C++. Действительно ли возможно, что RNG дает другую случайную переменную в двух различных машинах с помощью того же семени?

Пока у меня есть следующее:

from genrate_jsonv2 import ConfigurationHandler
import os
import argparse

def get_json_location(username=os.getlogin()):
    first = "/Users/"
    last = "/Desktop/data-code/Testdata"
    result = first + username + last
    return result

def get_config():
    parser = argparse.ArgumentParser()
    parser.add_argument("-d", "--export-date", action="store", required=True)
    args = parser.parse_args()

    return [args.export_date]

yml_directory = os.listdir('yaml')
yml_directory.remove('export_config.yaml')
data = get_config()[0]

def main():

 for yml in yml_directory:
    parameter_file = get_json_location
    export_data_file = yml
    new_export_date = data

    conf_handl = ConfigurationHandler(parameter_file, export_data_file, new_export_date)
    configuration = conf_handl.get_config()
    conf_handl.json_work()


if __name__ == '__main__':
    main()

Проблема в том, что в файле export_data_file я действительно не хочу передавать местоположение file_path, я предпочитаю, чтобы он просматривал каждое имя файла в каталог yml. При этом я получаю сообщение об ошибке «Ошибка чтения файла конфигурации»

.
5
задан user57528 21 January 2009 в 13:53
поделиться

7 ответов

Это, конечно, возможно, поскольку RNG может комбинировать машину определенные данные с семенем, таким как адрес сетевой платы, для генерации случайного числа. Это - в основном конкретная реализация.

9
ответ дан 18 December 2019 в 06:36
поделиться

Если Вам нужно что-то, что может быть повторено с машины на машину, попробовать Библиотеку Случайного числа Повышения.

5
ответ дан 18 December 2019 в 06:36
поделиться

Поскольку они действительно дают различные результаты, очевидно возможно, что они дают различные результаты. Легкий к ответу вопрос, затем!

Серьезно: не зная исходный код к RNG трудно знать, наблюдаете ли Вы ошибку или функцию. Но это кажется, что рассматриваемое RNG использует посеяное под вторым номером от где-то в другом месте, например, текущее время или некоторое аппаратно-зависимое значение как MAC-адрес сетевой платы.

5
ответ дан 18 December 2019 в 06:36
поделиться

Если это - псевдослучайный генератор, который использует только семя для создания последовательности числа, то по определению они не могут отличаться. Однако, если те, которых Вы используете, используют что-то зависимый машины для беспокойства семени, или вполне просто, другой алгоритм, это, конечно, довольно возможно. Какую реализацию Вы используете, и если это - стандартная реализация библиотеки, действительно ли они - оба та же версия?

4
ответ дан 18 December 2019 в 06:36
поделиться

Да. Существуют RNGs с плавающей точкой, например, чьи результаты могут зависеть от того, реализует ли Ваш ЦП правильно плавания IEEE (не guranteed в ISO C++). Кроме того, эффекты, такие как проливание 80 битов удваиваются до памяти, может влиять на результаты.

Существует также некоторый possibile беспорядок о понятии "семени". Некоторые люди определяют семя как весь вход для установки начального состояния RNG. Другие ограничивают его только явным входом в коде и исключают неявный вход из, например, источники HW или/dev/random.

2
ответ дан 18 December 2019 в 06:36
поделиться

Это зависит значительно, на котором RNG Вы используете. Вещи такие как random(3) или rand48(3) семейство разработано для возврата той же последовательности, когда выполнено с тем же семенем. Теперь, если RNG, которые Вы используете, берут /dev/random вывод, все ставки выключены, и результаты будут отличаться.

-1
ответ дан 18 December 2019 в 06:36
поделиться

Возможно, это - мало/обратный порядок байтов проблемы, или код обнаруживает процессор в некотором роде. Самый легкий способ сделать это должно было бы использовать точки останова или подобные стандартные программы отладки для наблюдения стандартных программ отбора и самого RNG на работе.

0
ответ дан 18 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: