找回密码
 加入
搜索
查看: 2022|回复: 9

[AU3基础] 脑筋急转弯,请问,如何计算30天数字的平均值!

[复制链接]
发表于 2019-10-26 01:06:40 | 显示全部楼层 |阅读模式
本帖最后由 heavenm 于 2019-10-26 06:24 编辑

如何通过相临的2个数字计算平均值?现在要计算30天平均值,需要知道所有30天的数字,能不能每天计算平均值

Dim $avg
For $i=1 To 30
        $avg+=$i
Next
MsgBox(0, '', $avg/30)


 楼主| 发表于 2019-10-26 01:11:15 | 显示全部楼层
本帖最后由 heavenm 于 2019-10-26 01:13 编辑

我想通过下一天的数字来计算全部的平均值!
不然每次计算平均值要计算30天的,太麻烦了!

用这个方法,小的数字是正确的
Dim $number[3] = [1, 2, 3]
Dim $avg = $number[0]
For $i = 0 To UBound($number) - 2
        $avg += Abs($number[$i] - $number[$i + 1]) / 2
Next
MsgBox(0, '', $avg);等于2,正确的

数字一大就玩完了
Dim $number[3] = [1, 22, 300]
Dim $avg = $number[0]
For $i = 0 To UBound($number) - 2
        $avg += Abs($number[$i] - $number[$i + 1]) / 2
Next
MsgBox(0, '', $avg);等于150,错误的,正确的应该是107

发表于 2019-10-26 13:23:35 | 显示全部楼层
正确不是应该是149.5吗?
Dim $avg = 0
 楼主| 发表于 2019-10-26 14:47:15 | 显示全部楼层
laycher 发表于 2019-10-26 13:23
正确不是应该是149.5吗?
Dim $avg = 0

不是
1+22+300=323/3=107

这个算法是通过隔天的数据来计算平均值的,但是平均值和总体计算的平均值差距有点大
发表于 2019-10-26 15:08:53 | 显示全部楼层
本帖最后由 afan 于 2019-10-26 16:56 编辑

1 22 300 是哪门子相邻数?非相邻数又如何不求和而计算平均值,这不是脑筋急转弯,是检测脑壳含水量…
BTW, 既然同样用For循环计算,那又为何不像一楼那样简单得出结果?

发表于 2019-10-26 15:16:34 | 显示全部楼层
实际上第n天对于平均值的影响只有与前期平均值之差的1/n,楼主认为始终是2是错误的想法,并不是只有两天
Dim $number[3] = [1, 22, 300]
Dim $avg = $number[0]
For $i = 1 To UBound($number) - 1
        $avg += ($number[$i] - $avg) / ($i+1)
Next
MsgBox(0, '', $avg)
 楼主| 发表于 2019-10-26 19:18:21 | 显示全部楼层
本帖最后由 heavenm 于 2019-10-26 19:19 编辑
afan 发表于 2019-10-26 15:08
1 22 300 是哪门子相邻数?非相邻数又如何不求和而计算平均值,这不是脑筋急转弯,是检测脑壳含水量…
BTW ...


我可能描述得难以理解
意思是相临的2天
1-30天,计算平均值,每天获取一个新的数字
要计算平均值现在就是把30天数据全部相加再除以天数!

一个数据在一个数据表里面,这样子要读30个表!所以想看看有没有直接通过下一天的数据来直接获取平均值。认真想想好像确实应该不可以额!貌似不是个脑筋急转弯,是个脑子撞墙!
发表于 2019-10-26 19:27:14 | 显示全部楼层
heavenm 发表于 2019-10-26 19:18
我可能描述得难以理解
意思是相临的2天
1-30天,计算平均值,每天获取一个新的数字

除非你保存已计算的平均值及数量,否则如果不是固定步进值的话只能从头加到尾再取均值
 楼主| 发表于 2019-10-27 06:59:22 | 显示全部楼层
本帖最后由 heavenm 于 2019-10-27 07:13 编辑
kevinch 发表于 2019-10-26 15:16
实际上第n天对于平均值的影响只有与前期平均值之差的1/n,楼主认为始终是2是错误的想法,并不是只有两天

这个方法好像结果并不是指定天数的平均值,是长期的平均值!意外掌握另外一个东西,这个可以当作数字波动走向!固定周期的平均值应该还是要全部累加再除才行!
Dim $number[3] = [1, 22, 300]
Dim $avg = $number[0]
For $i = 1 To UBound($number) - 1
        MsgBox(0, '',StringFormat('%s\n%s\n%s\n%s',$number[$i],$avg,($i + 1),($number[$i] - $avg) / ($i + 1)))
        $avg += ($number[$i] - $avg) / ($i + 1)
Next
MsgBox(0, '', $avg)

 楼主| 发表于 2019-10-27 07:16:40 | 显示全部楼层
afan 发表于 2019-10-26 19:27
除非你保存已计算的平均值及数量,否则如果不是固定步进值的话只能从头加到尾再取均值

嗯是的!不过意外的掌握了另一个知识哈!还是很有意义的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 06:39 , Processed in 0.074805 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表