gpt4 book ai didi

go - 如何使用 uint32s 提供随机源

转载 作者:数据小太阳 更新时间:2023-10-29 03:07:55 25 4
gpt4 key购买 nike

我正在尝试在 Go 中实现 32 位(MT19937-32、LFSR113 和 LFSR88 等)随机源,但是 math.Rand 的源接口(interface)接受 Int63 () 作为方法。

我们如何将 uint32 转换为 int64(非负 int64,或 63 位)

这是一个 LFSR88 代码(省略了一些方法和常量):

type LFSR88 struct {
s1, s2, s3, b uint32
}

.
.
.

func (lfsr *LFSR88) Uint32() uint32 {
lfsr.b = (((lfsr.s1 << 13) ^ lfsr.s1) >> 19)
lfsr.s1 = (((lfsr.s1 & 4294967294) << 12) ^ lfsr.b)
lfsr.b = (((lfsr.s2 << 2) ^ lfsr.s2) >> 25)
lfsr.s2 = (((lfsr.s2 & 4294967288) << 4) ^ lfsr.b)
lfsr.b = (((lfsr.s3 << 3) ^ lfsr.s3) >> 11)
lfsr.s3 = (((lfsr.s3 & 4294967280) << 17) ^ lfsr.b)
return (lfsr.s1 ^ lfsr.s2 ^ lfsr.s3)
}

最佳答案

uint32 转换为 int64 非常简单:

var u32 uint32 = /* some number */
var i64 int64 = int64(u32)

单独这样做的问题是你最终会得到一个半 0 位的 int64,所以你可能想将它们中的两个组合起来:

var u1, u2 uint32 = /* two numbers */
var i64 uint64 = int64(u1) + int64(u2)<<32

查看完整示例 here .

关于go - 如何使用 uint32s 提供随机源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57997159/

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