4 回答
TA贡献1852条经验 获得超1个赞
不,rand包根本不使用 C 标准库,您可以通过查看每个源文件来判断它不使用 CGO。
exp.go :
import ( "math" )
正常.go
import ( "math")
随机数
import "sync"
rng.go
没有进口
zipf.go:
import "math"
TA贡献1799条经验 获得超8个赞
C 标准对以下行为施加了有限的要求rand()
- 您通常得到的是具有合理周期性(与 相关RAND_MAX
)的线性同余生成器,并srand
允许您为该生成器播种。
因此,即使使用相同的起始种子,它也没有理由返回与另一个线性同余生成器或其他方式相同的序列。
如果你想让你的跨语言生成器匹配,那么你可能想推出自己的。
TA贡献2021条经验 获得超8个赞
我在 golang 和 C 中使用相同的种子,但得到不同的随机数我知道 php 使用 libc rand(),golang 怎么样?
//golang:
rand.Seed(12345);
rand.Uint32();
//C:
srand(12345);
rand();
C去随机的我已经通过 golang 实现了函数 rand 和 srand 。与 PHP/C 相比,它可以获得相同的结果。
package fcrypt
var index int
var r []int
func mysrand(seed int) {
r = append(r, seed)
for i := 1; i < 31; i++ {
r = append(r, (16807*r[i-1])%2147483647)
if r[i] < 0 {
r[i] = r[i] + 2147483647
}
}
for i := 31; i < 34; i++ {
r = append(r, r[i-31])
}
for i := 34; i < 344; i++ {
r = append(r, r[i-31]+r[i-3])
}
}
func myrand() uint32 {
i := 344 + index
r = append(r, r[i-31]+r[i-3])
index = index + 1
return uint32(r[i]) >> 1
}
- 4 回答
- 0 关注
- 150 浏览
添加回答
举报