170 похожих чатов

#Include <iostream> #include <random> using namespace std; int main() {

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 байт ? по идее тут не должно быть никакой псевдо-рандом генерации вне ядра. ЖЕ. где я не прав ?

10 ответов

22 просмотра

попробуйте так: cout << +dis(rd);

Андрей Таусинов
попробуйте так: cout << +dis(rd);

Это приведение к int унарным +'ом?

Mark ☢️-Korenberg Автор вопроса
Андрей Таусинов
попробуйте так: cout << +dis(rd);

ну я, конечно, попробую, но что это изменит?

Mark ☢️ Korenberg
ну я, конечно, попробую, но что это изменит?

Предлагаю поступить в обратном порядке - если изменит, то я объясню

Mark ☢️-Korenberg Автор вопроса
Андрей Таусинов
Предлагаю поступить в обратном порядке - если изме...

вывод, конечно, поменялся, но как брало 8 байт так и берёт

Mark ☢️ Korenberg
вывод, конечно, поменялся, но как брало 8 байт так...

Извиняюсь - неправильно вопрос понял, думал, что проблема в том, что на экран печатается меньше, чем ожидаете. Подозревал, что это просто из-за непечатных символов. Но даже это не так, там от 'a' до 'z' выборка.

Mark ☢️-Korenberg Автор вопроса
Андрей Таусинов
Извиняюсь - неправильно вопрос понял, думал, что п...

Да. печатается всё нормально. вопрос почему рандома мало вынимает из ядра

Mark ☢️-Korenberg Автор вопроса
Eoan Ermine
Потому что реализация так решила

А как зафорсить чтобы всегда брало из ядра ?

Mark ☢️ Korenberg
вывод, конечно, поменялся, но как брало 8 байт так...

ну я только знаю, что в некоторых имплементациях гпсч, берётся случайная аппаратная последовательность и на неё основе генерятся уже значения, ибо каждый раз обращаться к аппаратной части не эффективно

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

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта