static random_device rd {};
static uniform_int_distribution<char> dis('a', 'z');
for (unsigned int i = 0; i < 300; ++i)
cout << dis(rd);
cout << endl;
}
strace :
getrandom("\xbe\xa8\x98\x18\xae\xe5\x55\xd3", 8, GRND_NONBLOCK) = 8
brk(NULL) = 0x23cf000
brk(0x23f0000) = 0x23f0000
newfstatat(1, "", {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x7), ...}, AT_EMPTY_PATH) = 0
write(1, "wdykohuqkanfvfziojclhitgwyuaenec"...) = 301
exit_group(0) = ?
Вопрос, почему я печатаю 300 символов, а из рандома прочиталось только 8 байт ? по идее тут не должно быть никакой псевдо-рандом генерации вне ядра. ЖЕ. где я не прав ?
попробуйте так: cout << +dis(rd);
Это приведение к int унарным +'ом?
ну я, конечно, попробую, но что это изменит?
Предлагаю поступить в обратном порядке - если изменит, то я объясню
вывод, конечно, поменялся, но как брало 8 байт так и берёт
Извиняюсь - неправильно вопрос понял, думал, что проблема в том, что на экран печатается меньше, чем ожидаете. Подозревал, что это просто из-за непечатных символов. Но даже это не так, там от 'a' до 'z' выборка.
Да. печатается всё нормально. вопрос почему рандома мало вынимает из ядра
Потому что реализация так решила
А как зафорсить чтобы всегда брало из ядра ?
ну я только знаю, что в некоторых имплементациях гпсч, берётся случайная аппаратная последовательность и на неё основе генерятся уже значения, ибо каждый раз обращаться к аппаратной части не эффективно
Обсуждают сегодня