首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go中和与回报的高性能计算

Go中和与回报的高性能计算
EN

Code Review用户
提问于 2020-01-15 12:33:05
回答 1查看 82关注 0票数 2

我正在写一个金融图书馆,目的是让戈朗的表现最好。

函数Re计算浮动列表的返回,函数 sum 计算浮动列表的和。

代码语言:javascript
复制
//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
}

对这两个函数是否还有进一步的优化,或者另一种更有表现力的方法来编写它们?

EN

回答 1

Code Review用户

回答已采纳

发布于 2020-01-15 15:41:44

在Go中,当您想要度量函数性能时,请使用Go testing包来运行基准测试。

例如,

returns.go

代码语言:javascript
复制
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

代码语言:javascript
复制
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)
    }
}

输出:

代码语言:javascript
复制
$ 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
$

我看了一些其他的选择,但那是最快的。

注意:我修正了你的除以零错误。

票数 -1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/235657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档