请教一个求错误百分比算法,谢谢帮助!

afgkidy 2012-07-10 10:50:06
统计任意连续10分钟错误消息百分比(即错误消息个数占总消息百分比),以1分钟为单位,每分钟统计一次。

方法一:
把这10分钟错误消息求和为X,总消息求和为Y,然后X/Y得到错误消息百分比。
遇到问题:但是遇到一个问题,因为X和Y值可能很大,4字节存储这个大整数会越界(最大只能用4字节)。

方法二:
每分钟分别求错误信息百分比,然后在求平均百分比。
遇到问题:统计不准。比如举例一个极端例子,前9分钟每分钟只有1个消息且是错误消息,故前9分钟每分钟的错误百分比都是100%,第10分钟有10000个信息,错误消息个数为0,第10分钟错误消息百分比为0%,所以这10分钟的平均错误率为90%。

如果按照方法一计算,则错误百分比为9/10009,约为0%了。

方法一算出的结果是最精确的,是最理想的结果,但是受存储限制,不能采用。
方法二在这样极端情况下算出的值偏差太大,也不能采取。

求一种算法,算出的值比较接近方法一算出的结果。

数学丢的差不多了,特贵地求助,非常感谢。
...全文
339 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
FancyMouse 2012-07-11
我好奇的是为什么10分钟就能撑爆2^32个消息。
回复
afgkidy 2012-07-11
1. 大侠们不用纠结为什么10分钟就越界,因为我是用10分钟举例的,实际中可能会是几百甚至几千几万分钟,当然每分钟的信息如果保存在一个四字节中是不会越界的,但是所有信息的总数保存在一个四字节中就要越界。
2. 忘了说明一点:不能用浮点计算,因为不支持浮点数计算(Linux内核编程不支持浮点,做内核开发的懂得)。
回复
cheneyfeng3 2012-07-11
方法一:
把这10分钟错误消息求和为X,总消息求和为Y,然后X/Y得到错误消息百分比。
遇到问题:但是遇到一个问题,因为X和Y值可能很大,4字节存储这个大整数会越界(最大只能用4字节)。

针对这个方案,你是否可以将X,Y拆开,按每分钟为一个单位。
X=X1+X2+X3+....+X10
Y=Y1+Y2+Y3+....+Y10
错误率=(X1+X2+X3+....+X10)/(Y1+Y2+Y3+....+Y10)
回复
nice_cxf 2012-07-11
内存这么紧张?连4个字节都没有?就算有1个字节大概也没问题了啊?
如果真是这样,最简单的是用float保存错误消息 和总消息,最后结果会有误差,不过应该在10^(-7)左右
回复
lzc52151 2012-07-11
我理解楼主是说XY作为单个变量可能超过4字节,而总的内存应该是不限的,就是说,在第10分钟时,各分钟的X1、Y2、X2、Y2。。。应该都是可以放在内存中并可以读出来的。
如果是这样,在第十分钟可以如下计算:
1/(Y1/x1+Y2/x1+...+Y10/x1)+1/(Y1/x2+Y2/x2+...+Y10/x2)+...+1/(Y1/x10+Y2/x10+...+Y10/x10)
每个XiYi是可以存的下的,计算Yj/Xi用4个字节也够了,基本上每一步都在4个字节范围内。
如果连XiYi都无法保存,那就得想想有没有好的递推式子了,暂时没想到
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2012-07-10 10:50
社区公告
暂无公告