2013-10-23 68 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; 
} 

這可以被重新寫爲一個宏。