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 關注
- 195 瀏覽
添加回答
舉報