gpt4 book ai didi

c++ - 指向64位数字中的32位是否安全?

转载 作者:行者123 更新时间:2023-12-01 15:05:22 25 4
gpt4 key购买 nike

我正在使用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()被调用,种子更新以及该函数返回更新的结果。

最佳答案

可能,但是在狡猾的方面有一点(鉴于您正在函数中修改种子,它将成为一个寄存器值,因此通过指针进行访问将不会那么有效)。在这种情况下,最好只使用bitshift提取32位。

uint64_t seed = 0x2cf915021e8312a0;            // randomly chosen from random.org

uint32_t xorshiftStar32() {
seed ^= seed >> 12;
seed ^= seed << 25;
seed ^= seed >> 27;
return (seed >> 32) * (uint64_t)(0x2545f4914f6cdd1d);
}

实际上,这会导致asm稍微好一些(请注意,我们已将mov进行了换档) https://godbolt.org/z/-49tZE

关于c++ - 指向64位数字中的32位是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59640398/

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