Я играю с некоторыми элементарными моментами в Go и у меня есть вопрос. Я хочу приурочить Голанга к получению квадратного корня каждого элемента массива, но я получаю два несколько разных ответа независимо от того, сохраняю ли я вывод. Вот моя первая версия:
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 мс при трансляции и несколько сотен мс при зацикливании.