Реализация gcc из std::random_device
кажется мне странной. В частности, строка 137:
random_device::result_type
random_device::_M_getval()
{
#if (defined __i386__ || defined __x86_64__) && defined _GLIBCXX_X86_RDRAND
if (!_M_file)
return __x86_rdrand();
#endif
Предположим, что все эти величины определены. Затем, когда я вызываю оператор вызова для экземпляра std::random_device
, я получаю результат из инструкции rdrand
. Но rdrand
не реализует случайное устройство; rdrand
- генератор псевдослучайных чисел, ближе к (скажем) твистеру Мерсенна, чем физическому источнику или случайности.
Я бы ожидал здесь вызов rdseed
buildin / intrinsic, поскольку rdseed
запрашивает схему, которая генерирует случайные числа через тепловой шум . Для меня это больше похоже на «устройство».
Но я не знаю много о генерации случайных чисел; так что мой мыслительный процесс о реализации std::random_device
неверен? Почему?