亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang rand() 是否使用 libc rand()

golang rand() 是否使用 libc rand()

Go
一只斗牛犬 2023-06-01 17:24:03
我在 golang 和 C 中使用相同的種子,但得到不同的隨機數我知道 php 使用 libc rand(),golang 怎么樣?//golang:rand.Seed(12345); rand.Uint32();//C:srand(12345); rand();
查看完整描述

4 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

不,rand包根本不使用 C 標準庫,您可以通過查看每個源文件來判斷它不使用 CGO。

  • exp.go?:

    import?(
    ????"math"
    ????)
  • 正常.go

    import?(????
    ????"math")
  • 隨機數

    import?"sync"
  • rng.go

    沒有進口

  • zipf.go:

    import?"math"


查看完整回答
反對 回復 2023-06-01
?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

C 標準對以下行為施加了有限的要求rand()- 您通常得到的是具有合理周期性(與 相關RAND_MAX)的線性同余生成器,并srand允許您為該生成器播種

因此,即使使用相同的起始種子,它也沒有理由返回與另一個線性同余生成器或其他方式相同的序列。

如果你想讓你的跨語言生成器匹配,那么你可能想推出自己的。


查看完整回答
反對 回復 2023-06-01
?
寶慕林4294392

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

}


查看完整回答
反對 回復 2023-06-01
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

golang rand() 是否使用 libc rand()

不。


查看完整回答
反對 回復 2023-06-01
  • 4 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號