gpt4 book ai didi

c++ - 将 uint64_t rdtsc 值转换为 uint32_t

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:24 24 4
gpt4 key购买 nike

我有一个 RNG 函数 xorshift128plus 需要一个 Xorshift128PlusKey:

/** 
* \brief Keys for scalar xorshift128. Must be non-zero.
* These are modified by xorshift128plus.
*/
struct Xorshift128PlusKey
{
uint64_t s1;
uint64_t s2;
};

/**
* \brief Return a new 64-bit random number.
*/
uint64_t xorshift128plus(Xorshift128PlusKey* key);

我想使用 rdtsc(处理器时间戳)为我的 RNG 播种。问题是 msvc 下的 __rdtsc 内在函数返回一个 64 位无符号整数,并且种子必须是一个 32 位无符号整数。将 rdtsc 转换为种子的最佳方法是什么同时保持随机性。转换必须尽可能快

我无法使用std libboost。 (这是一个游戏引擎)

最佳答案

64 位处理器时间戳根本不是随机的,因此在将其缩小到 32 位时无需保留随机性。您可以简单地使用最低有效的 32 位作为种子。随机性是 PRNG 的责任,而不是种子的责任。

unsigned __int64 tsc = __rdtsc();
uint32_t seed = static_cast<uint32_t>(tsc & 0xFFFFFFFF);

关于c++ - 将 uint64_t rdtsc 值转换为 uint32_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43663740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com