Go语言求取差分时间序列中小于0的最大值结果异常如何解决
问题原因分析
- 初始值设置错误:
math.SmallestNonzeroFloat64是Go语言中float64类型的正的最小非零值(数值约为5e-324),本身大于0。你需要筛选的是小于0的数值,所有符合条件的负数都比这个正初始值小,因此循环中maxValue < n[i] && n[i] < 0的判断永远不会触发,最终返回的就是初始设置的这个正极小值,和预期不符。 - 缺少无符合条件结果的兜底逻辑:如果输入序列中没有任何小于0的元素,当前代码也会返回错误的初始值,无法输出符合业务需求的默认结果。
修正方案
修正后的代码如下,测试返回结果为预期的-1:
import "math" func MaxBelowZero(n ...float64) float64 { // 初始值设为负无穷,保证所有负数都能大于初始值 maxValue := math.Inf(-1) if len(n) == 0 { return 0. } // 从索引1开始遍历,直接跳过首个固定为0的元素 for i := 1; i < len(n); i++ { if n[i] < 0 && n[i] > maxValue { maxValue = n[i] } } // 兜底逻辑:未找到符合条件的负数时返回默认值,可根据业务需求调整 if maxValue == math.Inf(-1) { return 0. } return maxValue }
内容的提问来源于stack exchange,提问作者JMaia
相关产品推荐
相关产品推荐

