登录
首页 >  Golang >  Go问答

寻找最小值低于零

来源:stackoverflow

时间:2024-03-03 14:57:25 218浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《寻找最小值低于零》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我正在尝试从差异 n[i] - n[i-1] 时间序列中获取最大值。切片中的第一个值始终为零,代码如下:

func MaxBelowZero(n ...float64) float64 {
var maxValue float64
if len(n) == 1 {
    return n[0]
} else if len(n) == 0 {
    return 0.
}
for i := range n {
    if i == 0 {
        maxValue = math.SmallestNonzeroFloat64
        continue
    }
    if maxValue < n[i] && n[i] < 0 {
        maxValue = n[i]
    }
}
return maxValue
}

var sliceTest = []float64{0, 1, 2, -1, -2, -10, 10, 20}
MaxBelowZero(sliceTest...)
Output: 5e-324

它应该是-1。我究竟做错了什么?我希望得到一些帮助。 演示中的代码:链接


正确答案


math.smallestnonzerofloat64 是最接近 0 且非 0 的数字,而不是距离 0 最远的数字。试试这个:

go playground

func maxbelowzero(values ...float64) float64 {
    if len(values) == 0 {
        return 0
    } else if len(values) == 1 {
        return values[0]
    }
    max := -math.maxfloat64
    for _, n := range values {
        if n >= 0 {
            continue
        }
        if n > max {
            max = n
        }
    }
    return max
}
func MaxBelowZero(n ...float64) float64 {
    maxValue := -math.MaxFloat64 // Initial value must be negative
    if len(n) == 1 {
        return n[0]
    } else if len(n) == 0 {
        return 0.
    }
    for i := 1; i < len(n); i++ {
        diff := n[i] - n[i-1] // Correct logic here
        if diff > maxValue && diff < 0 {
            maxValue = diff
        }
    }
    return maxValue
}

好了,本文到此结束,带大家了解了《寻找最小值低于零》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>