我正在使用 xorshift* 生成随机 64 位数字,并希望使用最重要的 32 位作为我的输出。仅仅创建一个指向最高有效位的指针并返回该值有什么不安全的吗?我知道我可以只使用位移,但我希望将该选项与该选项进行比较以提高性能。我已经对此方法进行了基本测试,它似乎在所有 g++ 优化级别下都按预期工作,但我不确定它是否是定义的行为,如果不是,它可能会随着项目的发展而导致问题。
uint64_t seed = 0x2cf915021e8312a0; // randomly chosen from random.org
uint32_t* seed_msb = (uint32_t*)(&seed) + 1; // +1 to account for endianness
uint32_t xorshiftStar32(){
seed ^= seed >> 12;
seed ^= seed << 25;
seed ^= seed >> 27;
return (*seed_msb) * (uint64_t)(0x2545f4914f6cdd1d);
}
到目前为止我所做的测试只是检查每次调用 xorshiftStar32() 时,种子更新并且函数返回更新的结果。