我正在玩围棋中的一些基本时间并有一个问题。我想给 Golang 计算一个数组每个元素的平方根的时间,但是无论我是否保留输出,我都会得到两个不同的答案。这是我的第一个版本:
package main
import ("fmt"
"time"
"math"
"math/rand"
)
// A random array of integers
func randomArray(max int ,len int) []int {
a := make([]int, len)
for i := 0; i <= len-1; i++ {
a[i] = rand.Intn(max)
}
return a
}
// Taking square root of each element in array
func sqrt_array(arr [] int) [] float64 {
var len_arr = len(arr)
a := make([]float64, len_arr)
for i, v := range arr {
a[i] = math.Sqrt(float64(v))
}
return a
}
func main() {
arr := randomArray(100, 10e6)
sqrt := make([]float64, len(arr))
start := time.Now()
sqrt = sqrt_array(arr)
end := time.Now()
fmt.Println("time taken: ", end.Sub(start), sqrt[0])
}
平均大约 36 毫秒:
time taken: 36.542019ms 9
现在,当我用空白标识符替换输出“sqrt”时,我得到的东西要慢得多。具体来说,我将 main() 替换为
func main() {
arr := randomArray(100, 10e6)
// sqrt := make([]float64, len(arr))
start := time.Now()
_ = sqrt_array(arr)
end := time.Now()
fmt.Println("time taken: ", end.Sub(start))
}
平均得到大约 92 毫秒
time taken: 92.121481ms
有人能解释发生了什么吗?我觉得如果我理解了,我可能会学到一些关于 Go 的东西。
顺便说一句,我发现 Python 中的相同计算在广播时约为 20 毫秒,如果在循环中则为数百毫秒。