У меня есть строка кода, которая использует наносекундный захват высокоточных часов для заполнения генератора псевдослучайных чисел Mersenne Twister. Что-то в этом роде:
rng.seed(duration_cast<nanoseconds>(high_resolution_clock::now().time_since_epoch().count());
Я знаю, что mt в boost может принимать только 32-битные целые числа (это то, что принимает seed()) и что эта продолжительность, приведенная к наносекундам, составляет не менее 64 бит (я также знаю, что этот код вызовет предупреждение о преобразовании, которое может быть позаботился с помощью static_cast).
Мой вопрос заключается в том, когда это преобразование в 32-битное целое число будет содержимым этих битов. Я знаю, что компилятор сохраняет младшие 32 бита при преобразовании 64-битного целого числа в 32-битное целое число. Я также нахожусь на машине с маленьким порядком байтов. Поскольку я знаю, что текущее время эпохи в секундах составляет ~ 1,4 * 10 ^ 9, будут ли эти младшие 32 бита первыми ~ 10 цифрами времени эпохи или, поскольку это прямой порядок байтов, это будет случайная тарабарщина в конце?
Любые советы или указания на чтение очень ценятся.
mt19937_64
вместо этого? - person Some programmer dude   schedule 24.06.2015