寻找零以下的最大值

我试图从差异 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 的数字,而不是离零最远的数字。尝试这个:

去游乐场

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
}


以上是寻找零以下的最大值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>