2013-10-23 38 views
1

我试图计算丢弃的分组的百分比uisng定点算术:如何使用定点算法计算百分比?

丢弃的分组/(丢弃的数据包+发送的分组)

的分组可以被传送,或者它可以被丢弃。上面的公式将提供被丢弃的数据包的百分比。

问题是我正在做一个固定点体系结构(不允许浮点)。我已经能够拿出最好的是这样的:

(100 *丢弃的数据包)/(丢弃的数据包+传输的数据包)

这会工作,但它存在几个问题。它只能让我精确到正负1%。你也必须担心溢出问题。

这一定是一个很常见的问题;我想知道是否有更好的方法来做到这一点?

+0

你想要什么准确度? – stark

回答

2

OP方法给出了“精确度加0%或减1%”而不是“加或减1%”。要得到+/- 0.5%的使用(100 * dp +(dp + tp)/ 2)/(dp + tp)。注意:整数除法截断,而不是舍入。

为了得到更好的,简单* 1000,* 10000等

为了避免溢出,使用unsigned long longuint64_tuintmax_t

实施例:(每千)

unsigned long long DroppedPerThousand(unsigned dropped, unsigned transmitted) { 
    unsigned long long sum = dropped; 
    sum += transmitted; 
    return (1000ULL*dropped + sum/2)/sum; 
} 

这可以被重新写为一个宏。