我正在写一个金融图书馆,目的是让戈朗的表现最好。
函数Re计算浮动列表的返回,函数 sum 计算浮动列表的和。
//Calculate returns
func Re(data []float64) []float64 {
re_ := make([]float64, len(data))
for i := 1; i < len(data); i++ {
re_[i] = ( (data[i]/data[i-1])-1)
}
return re_
}
// sum of float64 list
func Sum(floatList []float64) float64 {
var totalx float64
for _, valuex := range floatList {
totalx += valuex
}
return totalx
}对这两个函数是否还有进一步的优化,或者另一种更有表现力的方法来编写它们?
发布于 2020-01-15 15:41:44
在Go中,当您想要度量函数性能时,请使用Go testing包来运行基准测试。
例如,
returns.go:
package finance
// Calculate returns
func Re(data []float64) []float64 {
var re []float64
if len(data) > 0 {
re = make([]float64, len(data))
}
for i := 1; i < len(data); i++ {
if data[i-1] != 0 {
re[i] = (data[i] / data[i-1]) - 1
}
}
return re
}
// Calculate sum
func Sum(data []float64) float64 {
var sum float64
for _, x := range data {
sum += x
}
return sum
}returns_test.go:
package finance
import "testing"
func BenchmarkRe(b *testing.B) {
data := make([]float64, 5*12)
for i := range data {
data[i] = float64(i)
}
b.ResetTimer()
for N := 0; N < b.N; N++ {
Re(data)
}
}
func BenchmarkSum(b *testing.B) {
data := make([]float64, 5*12)
for i := range data {
data[i] = float64(i)
}
b.ResetTimer()
for N := 0; N < b.N; N++ {
Sum(data)
}
}输出:
$ go test returns.go returns_test.go -bench=. -benchmem
BenchmarkRe-4 7545566 156 ns/op 480 B/op 1 allocs/op
BenchmarkSum-4 28272992 41.5 ns/op 0 B/op 0 allocs/op
$我看了一些其他的选择,但那是最快的。
注意:我修正了你的除以零错误。
https://codereview.stackexchange.com/questions/235657
复制相似问题