寻找零以下的最大值
我试图从差异 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
}