我用來測試某些預(yù)期行為的應(yīng)用程序的一小部分給出了不同的輸出,具體取決于我運行它的處理器。這是代碼的相關(guān)部分: for b := 0; b < intCounter; b++ { //int64Random = rand.Int63() int64Random = int64(rand.Int())//CHECKING FOR SANITYfmt.Println("int64Random is " + strconv.FormatInt(int64Random, 10)) slcTestNums = append(slcTestNums, int64Random) }當(dāng)我在我的 Mac(amd64,darwin)上運行它時,我得到如下輸出:int64Random is 2991558990735723489int64Random is 7893058381743103687int64Random is 7672635040537837613int64Random is 1557718564618710869int64Random is 2107352926413218802當(dāng)我在 Pi(arm,linux)上運行它時,我得到如下輸出:int64Random is 1251459732int64Random is 1316852782int64Random is 971786136int64Random is 1359359453int64Random is 729066469如果在 Pi 上我將 int64Random 更改為 = rand.Int63() 并重新編譯,我會得到如下輸出:int64Random is 7160249008355881289int64Random is 7184347289772016444int64Random is 9201664581141930074int64Random is 917219239600463359int64Random is 6015348270214295654...這更接近 Mac 所得到的。這是因為處理器架構(gòu)在運行時發(fā)生了變化嗎?為什么int64(rand.Int())生成 int64 范圍的數(shù)字而不是保留一個 int 范圍的數(shù)字,而是更改它所存儲的變量的類型?我是否錯過了提到這種行為的 Go 文檔?
- 1 回答
- 0 關(guān)注
- 206 瀏覽
添加回答
舉報
0/150
提交
取消